# File: api-overview\api-explorer.md # API Explorer API Explorer is an interactive web application and an excellent way to try our endpoints without writing any code. You can use them to build, view, and send HTTP requests that call BoldSign APIs. API Explorer lets you test your requests using actual sandbox or production resources in your account, such as documents, templates, and user objects. To play with API Explorer, all you need is a {% customlink href="https://account.boldsign.com/signup?planId=1076" text="developer sandbox account" /%}. ## How to use API explorer To use the BoldSign API Explorer, - Navigate to the {% customlink href="https://api.boldsign.com/swagger/index.html" text="US region API explorer" /%}, the {% customlink href="https://api-eu.boldsign.com/swagger/index.html" text="EU region API explorer" /%}, the {% customlink href="https://api-ca.boldsign.com/swagger/index.html" text="CA region API explorer" /%} or the {% customlink href="https://api-au.boldsign.com/swagger/index.html" text="AU region API explorer" /%}, depending on your preferred region. - Click the `Authorize` button and provide the X-API-KEY (Retrieve the key by following this link {% customlink href="https://developers.boldsign.com/authentication/api-key/?region=us" text="Retrieve API key" /%} ), then click `Authorize.` - Next, select any API. For instance, I have chosen the `List Document` API and clicked the `Try it out` button. - Clicking on `Execute` will return the list of documents from your account. --- # File: api-overview\api-in-postman.md # API in Postman In this section, we will give you a quick overview of how to use the Postman API tool to send your first requests to the BoldSign API. ## Setup If you do not have Postman yet, start by downloading and installing it from {% customlink href="https://www.getpostman.com/downloads/" text="getpostman.com" /%}. Once you have installed Postman, you can start adding the BoldSign API collection by clicking this button. [![Run in Postman](/static/images/run-in-postman.svg)](https://god.gw.postman.com/run-collection/24291027-6fe717b2-c0aa-4d61-8d8b-cfed12eb596e?action=collection%2Ffork&collection-url=entityId%3D24291027-6fe717b2-c0aa-4d61-8d8b-cfed12eb596e%26entityType%3Dcollection%26workspaceId%3D243cafef-12cf-4ec0-b4f9-ef9018303398) ## Authorization The easiest way to authorize your requests is to add your X-API-KEY. To do that, you will first need to find your API token by following the link {% customlink href="https://app.boldsign.com/api-management/api-key/" text="Generate API Key" /%}. Next, continue with the following steps: - To authorize your requests, add your X-API-KEY to Postman by clicking the drop-down menu (three-dot icon) next to the collection name. - Choose `Edit.` - In the new edit screen, click the `Authorization` tab. - Add the type of authorization method, the Key (which is X-API-KEY), and the value of your X-API-KEY. Then, choose `Add to` to be `Header.` - Confirm the changes by clicking the `Update` button. Now, you can make your first request. Make sure that under the Authorization tab, the authorization type is selected as `Inherit auth from parent.` The following gif image visualizes the sending of a request to the BoldSign API in Postman. ![Sending request in Postman](/static/images/postman.gif) --- # File: api-overview\changelog.md # BoldSign Changelog {% date text="Last updated on Aug 13, 2026" /%} This page highlights new features, enhancements, and bug fixes to help you get the most out of BoldSign. ## 2026 ### Aug 13,2026 **Improvement** - Added support for Markdown formatting in private and document messages. **Bug Fix** - Enhanced the `EnableEmailOTP` property in the Send Template and Merge & Send APIs by changing its type from boolean to nullable boolean. ### Aug 3,2026 **Feature** - Added support for managing active login sessions directly from the Profile page. **Improvements** - Added support for disabling document reassignment based on the selected brand. - Added support for prefilling unique values in form fields when the same template is merged multiple times in Merge and Send API requests. ### July 23, 2026 **Bug Fix** - Fixed an issue with processing a specific Word document. ### July 20, 2026 **Feature** - Added a new `User Preference` setting to the `Download Document` option, allowing users to choose their preferred download format. Documents can now be downloaded either as a single combined file or as separate individual files. **Improvement** - Added support to extend document upload limit. ### July 10, 2026 **Features** - The Clone Document and Template APIs has moved from beta to live. - Added support for Knowledge-Based Authentication (KBA) in the Document and Template APIs. - Added support for Knowledge-Based Authentication (KBA) webhook events. - Added support for preventing signers from editing their name and initials during signing. - Added support for custom fields with group checkboxes and group radio buttons. **Improvement** - Added the `FormFieldId` property to the Template Properties API. ### July 10, 2026-Beta **Features** - Added support for Knowledge-Based Authentication (KBA) in the Document and Template APIs. - Added support for Knowledge-Based Authentication (KBA) webhook events. ### June 26, 2026 **Improvement** - Added support for the Document Time Zone option in both the document and template APIs. **Bug Fix** - Improved the performance and reliability of the Merge and Send API. ### June 19, 2026 **Improvements** - Added support for Allow Sign Everywhere in the Live SDK APIs. - Added Edited and Edit Failed document webhook events. - Added support for conditional rules in text tag definitions. **Bug Fix** - Fixed an issue where the "Generate Sign Link" option was incorrectly displayed for expired links when documents created with `disableEmails` set to `true` ### June 19, 2026-Beta **Improvement** - Added conditional rules support for text tag definitions. ### June 8, 2026 **Feature** - The Share Template API has moved from beta to live. **Improvements** - Added `IsCombinedAudit` and `IsCombinedAttachment` properties to the Document Properties API. - Added support for deleting existing SSO configurations. - Added support for enforcing ID verification for bulk link initiators when signing documents via bulk links. - Added support for defining dropdown field options using comma or semicolon separators, as well as importing options directly from a CSV file. - Added support for displaying and accepting the electronic signature disclosure only once per signer during the signing process. ### May 14, 2026 **Feature** - Added API support for embedded documents and template cloning in v6.2.6-beta. ### May 7, 2026 **Feature** - Added support for PowerPoint (.pptx) file uploads. **Bug Fix** - Fixed an issue where users were unable to sign a document when a formula field calculated a value with a decimal number. ### May 7, 2026-Beta **Feature** - Added support for PowerPoint (.pptx) file uploads. ### May 5, 2026 **Feature** - Added support for the Allow Sign Everywhere option in the document and template APIs. **Improvements** - Added support to control whether file modification is allowed or denied in the template APIs. - Added support to include the signer’s name in the email subject line for completed emails. - Fixed an issue where content was not properly translated when generating an embedded document creation link in languages other than English and opening the link. **Behavior Changes** - Previously, when the Require a new signature every time option was disabled, the signature was stored in the browser based only on the signer’s email address and reused for future documents. Now, the signature is stored based on both the signer’s name and email address, ensuring more accurate reuse across documents. **Bug Fixes** - Resolved a digital signature failure issue for a specific document. - Fixed an issue where documents could not be created if the signer’s email address contained non‑ASCII characters. - Fixed an issue where signer names were not preserved when modified in another document with the same email address. ### April 21, 2026 **Bug Fixes** - Fixed an issue where a tooltip was added to a hyperlink form field when created via the API. - Fixed an issue where form fields present on a page were duplicated when using the Create or Edit Template APIs. ### April 10, 2026 **Feature** - Added an API option to enforce providing default values when sending a document using a template. **Improvement** - Added support to require users to fill in default values for form fields when using templates. **Bug Fixes** - Resolved a signature frame spacing issue in downloaded documents. - Fixed an issue where the input option for entering a date in an editable date field was not visible on mobile devices. ### April 9, 2026 **Feature** - Added support for default value required option in form fields. ### April 9, 2026-Beta **Feature** - Added support for default value required option in form fields. ### April 1, 2026 **Improvement** - Added support for editing the document title even after the document has been sent. **Bug Fix** - Fixed an issue where the Prepare page failed to load after merging templates during a draft save action. ### March 27, 2026 **Feature** - Added support for drawing form fields in the APIs. **Improvements** - Added Qualified Electronic Signature (QES) support to the self-sign workflow. - Enhanced the UI design for field-level error notifications when sending documents. - Introduced a new Drawing Field, allowing users to add freehand or shape drawings within documents. ### March 26, 2026 **Feature** - Added support for the Drawing form field. ### March 26, 2026-Beta **Feature** - Added support for the Drawing form field. ### March 18, 2026 **Bug Fixes** - Fixed Unicode filename issue in CSV export. - Fixed a specific Word document alignment issue. - Fixed a bug in email branding where custom branding was not applied to the notification sent when changing a recipient. ### March 10, 2026 **Bug Fixes** - Added Asia/Singapore to the list of supported time zones. - Fixed an issue where updating the email on the My Profile page did not update existing bulk links. Signer notifications and delivered signed documents now correctly use the updated email. ### March 5, 2026 **Improvement** - Added support for downloading documents as Base64 via the REST API. To enable this, include the following header in your API request: `x-response-format: base64`. **Bug Fix** - Resolved an issue with anchor text detection. ### March 3, 2026 **Features** - The Group Contacts API has moved from beta to live. - Added support for defining and enforcing password requirements and rules for all users in the organization. - Added support for signer saved webhook event. - Added support for getting the embedded document edit URL to edit the in-progress, scheduled and draft documents. - Support to cancel the document editing which is in edit-mode. **Improvements** - Added the `SignerSaved` webhook event, which triggers when a signer saves a document without completing it. - Support for editing documents by generating an embedded link via the API has moved from beta to live. **Bug Fix** - Bulk-download issues for large files are now resolved. ### March 3, 2026-Beta **Feature** - Added support for signer saved webhook event. ### February 18, 2026 **Feature** - Added support to edit in-progress and draft documents. **Improvement** - Promoted the Edit Document API from Beta to Live. ### February 18, 2026-Beta **Improvement** - Added edit document methods to `IDocumentService`. ### February 11, 2026 **Improvement** - Improved error messages for editable date form-field validation. **Bug Fixes** - Fixed an issue where the logo was displayed incorrectly in Word documents. - Fixed a bug in the Edit Document where the document would not complete when a signer was removed. - Resolved an issue where drag and drop of form fields did not work in WKWebView. - Resolved an issue where setting a field’s ID in a form field’s conditionalRule via the API while the field was not present in the form‑fields array and then deleting that form field in the designer could cause the browser to become unresponsive. ### February 4, 2026 **Improvements** - Added the FromName and FromEmail properties to the documentHistory object in the Document Properties API to ensure accurate tracking of edit‑recipient action details. - Improved the invalid signer email address validation error message. - Provided signature frame support for signature form fields. ### February 4, 2026-Beta **Improvement** - Included the FromName and FromEmail properties in the documentHistory object of the Document Properties API to ensure accurate tracking of edit‑recipient action details. ### January 29, 2026 **Bug Fix** - Improved validation in the Change Recipient API to require the signer order property when signing order is enabled. ### January 22, 2026 **Features** - Added time format support for the editable date form field. - Allows document senders to securely protect sensitive data entered by signers in text box fields. - Enhanced editable date fields with a time format configuration option. - Added support for masking in textbox form field. - Added support for configuring signature frame settings when creating or editing a brand. **Improvements** - Added `displayStatus` and `inEditingMode` properties to the Document Properties, List, TeamList, and BehalfList APIs. - Moved to private beta and is not available to all customers. **Bug Fix** - Resolved an issue in which specific documents failed to upload. ### January 22, 2026-Beta **Features** - Added support for time format in editable date field settings. - Added support for masking in textbox form field. - Added support for configuring signature frame settings when creating or editing a brand. ### January 13, 2026 **Bug Fix** - Fixed an issue where the Audit Log showed Disclosure Consent as `Not requested by the sender` despite the setting being `Display to all signers`, caused by a delayed request and data loss. ### January 8, 2026 **Features** - Added support for the group signers in API. - Added `GroupSigners` property to Document and Template list and properties APIs for enhanced signer group management. - Introduced `SharedWithTeamId` property in template filters to allow filtering templates shared with any of the specified team IDs. **Improvement** - Added `context` object in webhook payloads (beta). - Provides `context.actor` (who performed the action) and `context.previousState` (previous values for changed fields). - Available for Document and Template webhook events. - Populated only for documents/templates created on or after January 08, 2026, older resources will have `context: null`. ### January 8, 2026-Beta **Features** - Added support for the share template API. - Added support for the group signers in API. - Added support for the preview embedded template API. - Added `GroupSigners` property to Document and Template list and properties APIs for enhanced signer group management. - Introduced `SharedWithTeamId` property in template filters to allow filtering templates shared with any of the specified team IDs. - New APIs added for Group Contact management: - Create - Update - Get - List - Delete - Added support for getting the embedded document edit URL to edit the in-progress, scheduled and draft documents. - Support to cancel the document editing which is in edit-mode. **Improvement** - Added `context` object in webhook payloads (beta). - Provides `context.actor` (who performed the action) and `context.previousState` (previous values for changed fields). - Available for Document and Template webhook events. - Populated only for documents/templates created on or after January 08, 2026, older resources will have `context: null`. ### January 7, 2026 **Features** - Introduced Natural Language AI support across multiple sections: `My Documents`, `Team Documents`, `My Templates`, `All Templates`, and `Shared Template Pages`. This feature is currently available in Beta. - Added Group Contact API support in Beta to enhance group management capabilities. - Added support for creating documents with a group signer through embedded document creation. - Added support for previewing templates by generating an embedded link via the API. - Added support for editing documents by generating an embedded link via the API. - Added Share Template API. - Added support for group signers in document and template APIs. **Improvements** - The `Shared with Teams` option is now available on Template pages for easier collaboration. - Added support for initiators to include CC recipients when signing via bulk links. - Added support for initiators to delete additional roles when signing via bulk links. - Added `context` object in webhook payloads (beta). - Provides `context.actor` (identifies who performed the action) and `context.previousState` (captures previous values for changed fields). - Available for Document and Template webhook events. - Populated only for documents/templates created on or after January 08, 2026, older resources will have `context: null`. **Bug Fixes** - Fixed an issue where specific documents failed to upload. - Fixed an issue where cloning or editing templates with a large number of form fields did not work. - Fixed an issue where the electronic disclosure acceptance date was not properly logged in the audit trail for InPerson signing. - Added HMAC signature header to verification requests when updating existing webhooks. ## 2025 ### December 23, 2025 **Bug Fix** - Fixed an issue that prevented the creation of embedded documents with automatic field detection. ### December 17, 2025 **Feature** - Added locale support across Sender Identity to enable multi-language experiences. **Improvements** - Resolved an issue where text tags in specific documents were not functioning correctly. - Added locale support in Sender Identity. - Changed the type of the `Size` property of the `Font` in the `TextTagDefinitions` from `float` to `float?`. - Changed the type of the `LineHeight` property of the `Font` in the `TextTagDefinitions` from `int` to `int?`. **Bug Fixes** - Resolved an issue with the maximum file upload limit when using the template feature. - Fixed an issue where specific documents failed to upload. - Fixed an issue where the account creation page did not display Czech translations correctly after a document was signed. - Fixed a bug in text tags where font size and line height overrides were ignored. ### December 17, 2025-Beta **Improvements** - Changed the type of the `Size` property of the `Font` in the `TextTagDefinitions` from `float` to `float?`. - Changed the type of the `LineHeight` property of the `Font` in the `TextTagDefinitions` from `int` to `int?`. ### December 11, 2025 **Feature** - The Team API has been upgraded from Beta to Live. **Improvements** - Fixed an issue where sending a document failed if the signer’s phone number included the Jersey country code. - Added a webhook event for template edits. - Promoted the Draft Send API from Beta to Live status. **Bug Fix** - Fixed an issue where digital signing failed for specific documents. ### December 11, 2025-Beta **Feature** - Added support for template edited webhook event. ### November 27, 2025 **Features** - Push notifications for document actions are now supported in the BoldSign mobile app. - Added support for extending the expiry of Bulk Send documents in bulk. **Improvements** - `QES (Qualified Electronic Signature)` now supports additional fields(`textbox`, `datasigned`, `editable date`) for multi-signing workflows. - QES signers can now assign the Date Signed and Editable Date form fields. **Bug Fix** - Fixed an issue where scheduling a document to be sent on Sunday did not work. ### November 20, 2025-Beta **Feature** - Added locale support across Sender Identity to enable multi-language experiences. ### November 17, 2025 **Feature** - Support for Korean language has been added. You can now select Korean as the signer’s language during document creation, providing a localized signing experience. **Improvements** - Added support for collecting user feedback on AI field detection during template creation in the web app. - Added support for Korean language for signers. **Bug Fixes** - Fixed an issue where uploading a CSV with non-English characters prevented bulk sending of documents. - Fixed a bug in the Behalf Document Listing API where email filtering was performed using a case-sensitive search. ### November 17, 2025-Beta **Feature** - Support for Korean language has been added. You can now select Korean as the signer’s language during document creation, providing a localized signing experience. ### November 11, 2025 **Features** - Added support for the draft send API. - Added support collaboration settings options in form fields. - Added support for form field permission options in the create and edit template APIs. - Added support allowed signature types in the document, merge and send API and template APIs. - Added support for template edited webhook event. ### November 6, 2025 **Features** - Added support for the Carlito font to provide enhanced typography options. - Added support for specifying signature types in the Send Document APIs. - Added support to specific allowed document types in identity verification settings for document send APIs. - Added support to get allowed document types and allowed countries details through `GetProperties` API. - Added support for the `Carlito` font family. - Support for filtering multiple users based on the userId parameter in the List Users API. **Improvements** - Added support for filtering users by provided `User IDs` in the `List API`. - Added support for applying the Carlito font to form fields. - Added support for preserving the allowed signature types defined in a template when creating a document from it. - Added support for the Carlito font in form fields and text tags. **Bug Fixes** - Resolved an issue where template creation intermittently failed when multiple form fields were selected and a new form field was dragged and dropped. - Fixed a bug in form field permissions in the Edit Template API. ### November 6, 2025-Beta **Features** - Added support to specific allowed document types in identity verification settings for document send APIs. - Added support to get allowed document types and allowed countries details through `GetProperties` API. - Added support for the `Carlito` font family. - Added support allowed signature types in the document, merge and send API and template APIs. - Support for filtering multiple users based on the userId parameter in the List Users API. ### October 29, 2025 **Bug Fix** - When editing a document, the metadata set in the document is now preserved correctly. ### October 22, 2025 **Features** - You can now restrict senders from adding, editing, or deleting fields when sending a document using a template. - Added support for form field permissions in document and template APIs. - Added support to get the specific sender identity details through `GetProperties` API. - Provided support for downloading templates with and without form fields in `DownloadTemplate` API. **Improvements** - Provided Change Team API support to transfer users from one team to another within the organization. - Added support for downloading templates with and without form fields via both the web app and API. - Resolved an issue with Thai language fonts in text box fields within downloaded documents. - Additional signing languages are now available for signers, including Chinese (Simplified), Chinese (Traditional), Japanese, and Thai. - Promoted the Sender Identity Properties API from Beta to Live status. **Bug Fix** - Fixed a bug in the Edit Template API that caused the form designer page to freeze when used on a draft template. ### October 22, 2025-Beta **Features** - Provided `ChangeTeam` API support to transfer users from one team to another team within the organization. - Provided support for downloading templates with and without form fields in `DownloadTemplate` API. ### October 8, 2025 **Feature** - Introduced `userId` and `teamId` properties to the webhook event payload to enable better identification and association with users and teams. **Improvements** - You can now copy the User ID and Team ID directly from the user and team details pages. - Added team ID and user ID properties to the document and template webhook event payload. **Bug Fix** - Fixed an intermittent document creation failure that occurred when a template referenced a deleted brand. ### October 8, 2025-Beta **Feature** - Introduced `userId` and `teamId` properties to the webhook event payload to enable better identification and association with users and teams. ### September 30, 2025 **Bug Fixes** - Fixed a font loading issue for the Polish language in the audit trail. - Fixed an issue where disclaimer text was being cut off in the Audit Trail. ### September 24, 2025 **Improvement** - The status will now change to `Completed` only after the document is digitally signed. If any errors occur during digital signing, the status will remain unchanged. **Bug Fix** - Fixed a bug in the Template Properties API where it incorrectly returned a 403 Forbidden error. ### September 18, 2025 **Feature** - Added `TemplateName` and `TemplateId` properties to the **Document Properties API**, under the `Files` property. **Breaking change** - Changed the type of the `Files` property in the **Template Properties API** from `List` to `List`. ***Previous*** ```csharp var templateClient = new TemplateClient(apiClient); var templateProperties = templateClient.GetProperties("templateId"); List files = templateProperties.Files; ``` ***Now*** ```csharp var templateClient = new TemplateClient(apiClient); var templateProperties = templateClient.GetProperties("templateId"); List files = templateProperties.Files; ``` ### September 17, 2025 **Improvements** - Added `TemplateName` and `TemplateId` properties to the Document Properties API under the `Files` property. - Changed the type of the `Files` property in the Template Properties API from `List` to `List`. **Bug Fixes** - Resolved an intermittent signing failure that occurred when documents included read-only text box fields. - Team admins and members are now prevented from accessing user, team, and contact details via the API whenever the account admin has restricted that access. - Added support for listing draft documents in the behalf document listing API. ### September 10, 2025 **Bug Fixes** - Resolved issues related to specific document uploads and text tag processing. - Fixed an intermittent timeout exception that occurred when sending documents via the mergeAndSend API. - Fixed a bug in collaboration settings within the Send and Create APIs. ### September 8, 2025 **Feature** - Added an `id` property to the sender identity list API response. **Improvements** - Support for uploading Google Docs directly from Google Drive has been added. - Added the sender identity ID property to the List and Properties APIs. **Bug Fix** - Resolved issues related to specific document uploads and auto-detection. ### September 8, 2025-Beta **Feature** - Added an `id` property to the responses of both the list and properties APIs for sender identity. ### September 3, 2025 **Features** - Added a `Reminder` event that triggers when a document reminder is sent. - Added a `lastReminderSentOn` field in the webhook's `signerDetails` to indicate when the reminder was sent. ### August 26, 2025 **Feature** - Added an endpoint for sender identity properties. ### August 26, 2025-Beta **Feature** - Added support to get the specific sender identity details through `GetProperties` API. ### August 25, 2025 **Feature** - The Hyperlink field now supports additional URI schemes, enabling developers to include Email `mailto:` and Telephone `tel:` links directly in the field value. **Improvements** - Added support for multiple signings with Qualified Electronic Signatures. - Web app: User-created API keys are automatically revoked when a user’s role is downgraded to enforce security controls. - You can now update the details of existing custom permissions, making it easier to keep access settings current. - Made the 'Add Me' option visible when sending documents via templates, enabling quick autofill of sender details. - Hyperlink field now supports email addresses and telephone numbers for more flexible contact linking. - Enabled support for Qualified Electronic Signatures (QES) for multiple signers within a single document. **Bug Fixes** - Resolved an issue affecting specific document uploads. - Resolved an issue where phone number validation for Oman numbers was not working correctly. - Fixed multiple bugs in the Edit Document API. ### August 25, 2025-Beta **Feature** - The Hyperlink field now supports additional URI schemes, enabling developers to include Email `mailto:` and Telephone `tel:` links directly in the field value. ### August 13, 2025 **Improvements** - Added proper error handling for already refunded invoices. - Added intranet history for scheduled downgrade plans. - Improved error messages in the Sender Identity API responses. ### August 11, 2025 **Feature** - Added support for combining multiple attachments within signed documents. **Improvement** - Introduced a Hidden property to the GetDocumentProperties API for form fields, enabling the identification and management of hidden form fields. **Bug Fixes** - Introduced a `Hidden` property to the GetDocumentProperties API for form fields, enabling the identification and management of hidden form fields. - Added support for combining attachments within signed documents. ### August 11, 2025-Beta **Bug Fixes** - Introduced a `Hidden` property to the GetDocumentProperties API for form fields, enabling the identification and management of hidden form fields. - Added support for combining attachments within signed documents. ### August 7, 2025 **Bug Fix** - Introduced the `FailedDeliveryMode` property in the Delivery Failed Webhook event to capture the mode of failure. ### August 7, 2025-Beta **Bug Fixes** - Introduced the `FailedDeliveryMode` property in the Delivery Failed Webhook event to capture the mode of failure. - Resolved the issue where the `Value` attribute was not supported in checkbox, radio button, image, and editable date text tag definition fields. ### August 4, 2025 **Bug Fixes** - Fixed an issue where updating 'notificationSettings' via the 'UpdateSenderIdentity' API unnecessarily required other sender identity properties. - Resolved the issue where the `Value` attribute was not supported in checkbox, radio button, image, and editable date text tag definition fields. ### August 4, 2025-Beta **Bug Fix** - Fixed an issue where updating 'notificationSettings' via the 'UpdateSenderIdentity' API unnecessarily required other sender identity properties. ### July 31, 2025 **Bug Fix** - Resolved an inconsistency where deactivated users were correctly marked as 'Deactivated' on the Users page but still displayed as 'Account Admin' in the role column on the Teams page. ### July 28, 2025 **Feature** - Added support for assigning form fields to multiple signers, allowing them to edit the fields during the document signing process. **Improvements** - Improved the display and functionality of the on-behalf action history on the Document Overview page. - A proper error message has been added for exceeding the maximum allowed length of the credit card name field on the payment page. - Added CORS support for OpenID Connect endpoints in implicit authentication. - Added support to notify users about page navigation during the embedded document and template creation workflow. **Bug Fixes** - Resolved an upload issue affecting specific Word documents. - Fixed a bug in template export that occurred with edited templates. ### July 28, 2025-Beta **Feature** - Added support for collaborative form fields in API. ### July 21, 2025 **Improvements** - Added support to restrict team admins and members from viewing organization's users and contacts. - Added support for enabling the `View Document` permission when creating custom permissions for the account admin role. ### July 17, 2025-Beta **Feature** - Added support to edit in-progress and draft documents. ### July 9, 2025 **Features** - Added Edit Document API (Beta). - Added support for automatically syncing users from Microsoft Azure AD to the BoldSign application. **Improvements** - AI-based form field detection support has been added to template editing in the web app. - Restricted sender identity for known permanently bounced emails. - Added support for extending the session before it expires. **Bug Fixes** - Fixed an issue where sensitive information—such as addresses, email addresses, or telephone numbers—in textbox and label fields was not automatically hidden in the Chrome browser on iPad/iOS. - Fixed the issue where signatures or initials were not preserved in the browser for reuse in future documents when the `Allow Configure` option was enabled and the document did not have any signature or initial fields. ### July 3, 2025 **Feature** - Added RecipientChangeLog, DocumentChangeLog, and FieldChangeLog properties to the EditCompleted action in the document history for the Document Properties API. ### July 2, 2025 **Improvements** - Added support for multiple languages in manual reminder email messages. - Added support for displaying document and field changes in the document history during editing. - Added support for copying and pasting text in the textbox editor using the mouse while editing text fields. **Bug Fixes** - Fixed an issue that affected the upload of specific documents. - Resolved an issue with the search functionality in the Team List API. - Fixed a bug in draft document send API related to duplicate form field ID. ### June 25, 2025 **Improvement** - Improved the lenient name-matching algorithm used in identity verification. **Bug Fix** - Resolved an issue where the signing process failed when formula fields contained decimal values. ### June 18, 2025 **Improvement** - Support for instantly simulating and completing the QES verification process using test data has been added. ### June 12, 2025 **Feature** - Added support to specify `AuthenticationFrequency` for signers. This feature allows control over how often signers are required to authenticate when accessing documents. ### June 12, 2025-Beta **Features** - Added support to send out draft documents. - Added support to specify `AuthenticationFrequency` for signers. This feature allows control over how often signers are required to authenticate when accessing documents. ### June 11, 2025 **Features** - The WhatsApp feature has moved from Beta to Live. - Added support to configure the authentication frequency for signers. This feature allows control over how often signers must authenticate when accessing documents. **Improvements** - Support for indicating that the document was signed and verified through QES in the final signed document has been added. - Added ID Verification support in CA region. - Expose support for template import and export. ### June 04, 2025 **Improvements** - Added many improvements to the template import and export feature. - Added `Review and Sign` button to the manual ID verification email notification for the recipients. - Support has been added to enhance the display of error messages when textbox validation fails. **Bug Fix** - Fixed the issue where the date format and document signing link did not update correctly in customized email templates. ### May 29, 2025 **Feature** - Enhanced text tag definitions by adding new properties to improve formatting and validation, enabling better customization and control over text elements. ### May 28, 2025 **Improvements** - Added support to display the creator of each bulk link on the Bulk Link Overview page. - Added support to resize the multiline textbox on the Filling and Designer pages. **Bug Fixes** - Fixed an issue where a specific Word document failed to upload correctly. - Resolved Swagger validation error `Operations must have unique operationIds` by assigning distinct operationId values to all API operations, ensuring accurate API documentation and client code generation. - Resolved Swagger validation error `Default values must be present in enum` by removing the default value attribute from the ResizeOption property. ### May 22, 2025 **Features** - Support for merging multiple templates and generating the embedded document creation link has been added. - Support to create the document with the formula field is added. - Added support to restrict edit and delete actions on form fields during template creation. ### May 21, 2025 **Feature** - The support for creating documents with the formula fields feature has transitioned from BETA to Live. **Improvements** - Added support for editing or deleting form fields created during template setup when sending documents. - The ability to merge multiple templates and generate embedded document creation links has transitioned from BETA to Live. **Bug Fixes** - When the initiator signs the bulk link by providing their email and name, any leading or trailing spaces in the email address are automatically removed, preventing the invalid email error. - Signing is blocked if an invalid signature or initial value is provided. - Fixed an issue where documents signed through bulk links were not removed from the responder section when automatic deletion was enabled. - Resolved an issue where group checkboxes repositioned unexpectedly when navigating and reselecting them using keyboard inputs. ### May 15, 2025 **Features** - Added support for identity verification and its webhooks. - Added support for audit trail localization. - Added metadata support for documents, users, and sender identities. - Added support for QES. - Added support for grouping checkboxes. - Added support to append files in template sending. - Added support for text tags in mergeAndSend and mergeCreateEmbeddedRequestUrl APIs. ### May 14, 2025 **Feature** - Qualified Electronic Signatures (QES) feature has moved from Beta to Live. **Improvements** - Text tag support for `mergeAndSend` and `mergeCreateEmbeddedRequestUrl` APIs has transitioned from Beta to Live. - Support for sending multiple templates with additional files appended to the end has moved from Beta to Live. - Support for uploading documents directly from Google Shared Drive has been added. - Added support to preserve or disable profile details (such as stored signatures, initials, and job titles) on the signing page. - Dropdown fields can now be set to read-only during document preparation or signing. **Bug Fix** - Fixed an `Access denied` error that occurred when a template created via API included both regular and in-person signers, and the in-person signer attempted to sign. ### May 07, 2025 **Feature** - Auto-detect form fields with enhanced DataSync accuracy, simplifying document setup. **Improvements** - Sync signer name and email fields accurately in bulk links, streamlining mass distributions. - Preserve bullet and numbered list formatting in Word documents during processing. **Bug Fixes** - Fixed bulk link query string issues to ensure accurate signer data entry. - Corrected Word document list formatting errors for consistent visuals. ### April 29, 2025 **Feature** - Customize recipient email content in the web app to align with your brand and messaging. **Improvements** - Navigate signing page fields effortlessly, speeding up the signing process. **Bug Fixes** - Fixed textbox resizing for bold fonts to maintain consistent formatting. - Corrected file name updates for signed documents uploaded to Google Cloud. - Resolved errors when merging templates with duplicate field names, ensuring seamless creation. ### April 17, 2025-Beta **Features** - Added support for metadata in sender identities. - Support to send a signature request link through WhatsApp is added. ### April 16, 2025 **Feature** - Send signature requests via WhatsApp (WebApp and API) to reach signers easily. **Improvements** - Rename uploaded documents for efficient file organization. - Add metadata to Sender Identity for enhanced document tracking. **Bug Fix** - Corrected API errors when `senderTimeZone` is empty, improving stability. ### April 9, 2025 **Feature** - Added support to list expiring documents in both Document List API and Team Documents List API. This enables filtering documents based on their expiration dates for improved document management. **Improvements** - Navigate and filter documents quickly with clickable tags on the Teams page. - Locate expired documents easily with the `Expired On` filter in `My Documents.` - Extended sender identity name limit to 80 characters for greater flexibility. ### April 9, 2025-Beta **Feature** - Added support to list expiring documents in both Document List API and Team Documents List API. This enables filtering documents based on their expiration dates for improved document management. ### March 28, 2025 **Features** - Support to set the resize option for text box form field. - Added support to list documents using the `Scheduled` status in Document List API. - Added the `Scheduled` status `ScheduledSendTime` property in both the Document List API and Document Properties API. - When using the **Schedule Send** feature, you must upgrade to the latest SDK version. Failing to upgrade may result in issues with the List and Properties APIs. ### March 28, 2025-Beta **Features** - Support to set the resize option for text box form field. - Added support to list documents using the `Scheduled` status in Document List API. - Added the `Scheduled` status `ScheduledSendTime` property in both the Document List API and Document Properties API. - When using the **Schedule Send** feature, you must upgrade to the latest SDK version. Failing to upgrade may result in issues with the List and Properties APIs. ### March 27, 2025 **Features** - Resize textboxes horizontally or vertically for flexible form design. - Schedule document sending to automate workflows. **Improvement** - Merge multiple templates into one, simplifying template management. ### March 20, 2025 **Features** - Support to include attachments in the completion email for sender identity has been added. - Support to notify CC recipients when signers view the document has been added. ### March 20, 2025-Beta **Features** - Support to include attachments in the completion email for sender identity has been added. - Support to notify CC recipients when signers view the document has been added. ### March 19, 2025 **Improvements** - Attach files to completion emails linked to sender identity, enhancing communication. - Notify CC recipients when signers view documents, keeping everyone informed. - Include seconds in `date signed` timestamps for precise tracking. - Mark Sandbox test documents clearly to avoid confusion. - Ignore hidden PDF form fields during auto-detection for accurate placement. ### March 12, 2025 **Improvements** - Include file names in base64 JSON inputs, streamlining API workflows. - Enhance brand logo quality for a polished look. **Bug Fix** - Fixed formula calculations for non-required fields, ensuring accurate results. ### March 5, 2025 **Feature** - Add text tag support to `mergeAndSend` and `mergeCreateEmbeddedRequestUrl` APIs, boosting automation. **Improvements** - Auto-renew expired bulk links for uninterrupted access. - Specify additional SSO scopes, enhancing security and customization. **Bug Fixes** - Fixed `Access Denied` errors when cloning revoked documents after ownership changes. - Ensured document IDs display correctly during template merging and sending. - Corrected nested formula calculation errors for reliable results. - Fixed field value mapping for templates with identical DataSync tags. - Applied fallback brands correctly when the original brand is deleted. ### March 5, 2025-Alpha **Feature** - Text tag support for the mergeAndSend and mergeCreateEmbeddedRequestUrl API requests is added. ### February 26, 2025 **Improvements** - Enhance audit log security details for greater transparency. - Edit textboxes via tab navigation, improving usability. **Bug Fixes** - Fixed text tag field placement to prevent page boundary issues. - Resolved DataSync value updates in Bulk Send, ensuring accurate data. ### February 18, 2025 **Improvements** - Revamp the share dialog for an intuitive user experience. - Optimize the extend expiry API for improved performance. **Bug Fixes** - Fixed missing logos in specific Word document uploads. - Resolved errors when deleting multiple documents simultaneously. - Strengthened Auto-Detect field validation in embedded API requests. - Preserved field values when updating signer emails during editing. - Fixed broken edit links after in-app template changes. ### February 18, 2025-Beta **Improvement** - Change `EnableQes` type from `bool` to `bool?` to preserve the template configuration. ### February 18, 2025-Alpha **Improvement** - Change `EnableQes` type from `bool` to `bool?` to preserve the template configuration. ### February 13, 2025 **Bug Fixes** - Fixed CSV export errors on the Contact page, ensuring accurate data. - Prevented signing if attachment uploads fail, enhancing reliability. ### February 7, 2025-Alpha **Feature** - Added a feature of Qualified Electronic Signature (QES) for documents and templates. ### February 6, 2025 **Feature** - Introduced Qualified Electronic Signatures (QES) in beta, expanding signature options. **Bug Fixes** - Fixed logo and checkbox alignment in Word document uploads. - Resolved SSO login issues after incorrect Authority URL setup. - Ensured tabindex fields remain navigable during validation failures. - Corrected font style updates in formula fields on the prepare page. - Fixed draft saving for cloned bulk link documents. ### January 29, 2025 **Improvements** - Replaced Contact Us with Upgrade or Start Free Trial on the Enterprise API plan page in the web app for better clarity. - Improved the user experience of the Advanced Plan subscription pages in the web app. **Bug Fix** - Fixed specific digital signature failures, ensuring consistent performance. ### January 23, 2025 **Feature** - Create documents with dynamic formula fields for advanced calculations. **Improvement** - Set sender's email as default reply-to for reminders, streamlining communication. **Bug Fix** - Hid unfilled fields from subsequent signers, enhancing privacy. ### January 23, 2025-Beta **Feature** - Support to create the document with the dropdown field is added. ### January 16, 2025 **Bug Fixes** - Excluded non-required attachment fields from downloads, reducing clutter. - Fixed maximum limit errors when re-uploading deleted documents. - Resolved Google Cloud backup failures in Firefox, ensuring cross-browser support. - Corrected folder and file creation errors with apostrophes in names. ### January 8, 2025 **Feature** - Added a support for NotoSans font family. ### January 8, 2025-Beta **Feature** - Added a support for NotoSans font family. ## 2024 ### December 27, 2024 **Features** - Added option to specify the maximum number of allowed authentication attempts for the signer during the signing process. - Added option to define a custom format for file names when documents are downloaded. **Bug Fixes** - Form field coordinates string conversion now ignores culture. ### December 27, 2024-Beta **Features** - Added option to specify the maximum number of allowed authentication attempts for the signer during the signing process. - Added option to define a custom format for file names when documents are downloaded. **Bug Fix** - Form field coordinates string conversion now ignores culture. ### November 13, 2024 **Feature** - Support for merging multiple templates and generating the embedded document creation link has been added. ### October 9, 2024 **Features** - Provided support to configure the custom email domain in branding. - The `ClonedWithFieldValues` event has been added to the document history in the `GetProperties` API. ### October 9, 2024-Beta **Features** - Provided support to configure the custom email domain in branding. - The `ClonedWithFieldValues` event has been added to the document history in the `GetProperties` API. ### October 3, 2024 **Feature** - Added support to filter documents, templates, and sender identity using the `BrandIds` property. ### September 19, 2024-Beta **Feature** - Added support to send multiple templates with `Files` appended at the end of the existing templates. ### September 11, 2024-Beta **Feature** - Added support for audit trail localization. ### September 4, 2024 **Features** - Added support to specify `TabIndex` in `FormField` and `TextTagDefinition`. - Added support to provide `Label` in `TextTagDefinition` for radio buttons. ### August 21, 2024 **Features** - Added support to configure whether to send email notifications for document edits to signers and CC recipients during the creation of documents or templates. - Support for removing form fields when sending a document using a template, and for sending documents by merging multiple templates, has been added. ### August 21, 2024-Beta **Features** - Added support to configure whether to send email notifications for document edits to signers and CC recipients during the creation of documents or templates. - Added support for read-only fields in text tags definitions. - Added support for offset positioning in text tags definitions. - Support for removing form fields when sending a document using a template, and for sending documents by merging multiple templates, has been added. ### July 25, 2024 **Features** - Enhanced document history functionality now includes logging for events such as Edit initiated, cancelled, and completed. ### July 25, 2024-Beta **Features** - Added document edited event in webhooks. - Enhanced document history functionality now includes logging for events such as Edit initiated, cancelled, and completed. ### July 18, 2024 **Feature** - The support to configure email notifications for signers and cc recipients while creating the document or template is added. ### July 18, 2024-Beta **Features** - Added support to group checkboxes and apply validations to it. - Added support to hold signer for prefilling after ID verification. ### June 6, 2024 **Features** - Added support to prefill form fields in the document. - Added support for edit template API to update an existing template properties. - Added support for background color in label form fields and custom form fields. - Added support for reminder, identity verification webhooks. - Added support for document metadata to store additional information about the documents. ### June 6, 2024-Beta **Feature** - Added support to send a template with `Files` appended at the end of the existing template. ### May 8, 2024 **Features** - Added support to get the specific brand details through Get brand API. - Support has been added to enable the SMS authentication while creating the document or template is added. - Support to send a signature request link through SMS is added. - Support for merging multiple templates and sending them for signature has been added. - Support for excluding the audit trail document from the completion email has been added when creating or editing a brand. **Bug Fix** - The issue with editing the brand, where brand name and brand logo properties shouldn't be set as required fields, has been resolved. ### May 8, 2024-Beta **Features** - Added support to get the specific brand details through Get brand API. - Support for excluding the audit trail document from the completion email has been added when creating or editing a brand. **Bug Fix** - The issue with editing the brand, where brand name and brand logo properties shouldn't be set as required fields, has been resolved. ### April 24, 2024 **Features** - Added support to get the specific brand details through Get brand API. - Support for merging multiple templates and sending them for signature has been added. - Support for excluding the audit trail document from the completion email has been added when creating or editing a brand. **Bug Fixes** - The issue with editing the brand, where brand name and brand logo properties shouldn't be set as required fields, has been resolved. ### April 24, 2024-Beta **Features** - Added support to get the specific brand details through Get brand API. - Support for excluding the audit trail document from the completion email has been added when creating or editing a brand. **Bug Fix** - The issue with editing the brand, where brand name and brand logo properties shouldn't be set as required fields, has been resolved. ### April 16, 2024 **Bug Fixes** - If the `ExpiryDateType` or `DisableExpiryAlert` property is set to null, we will fetch the values from 'BusinessProfileSettings' for the 'SendUsingTemplate' API - If the `EnableReassign` property is set to null, we will fetch the values from template settings for the 'SendUsingTemplate' API ### April 16, 2024-Beta **Feature** - Added support to prefill form fields in the document. **Bug Fixes** - If the `ExpiryDateType` or `DisableExpiryAlert` property is set to null, we will fetch the values from 'BusinessProfileSettings' for the 'SendUsingTemplate' API - If the `EnableReassign` property is set to null, we will fetch the values from template settings for the 'SendUsingTemplate' API ### April 9, 2024 **Breaking change** - The datatype for `BrandLogo` in the `BrandSettings` class has been updated from `IDocumentFile` to `IImageFile`. This change enables the flexibility to pass instances such as `ImageFilePath`, `ImageFileBytes`, or `ImageFileStream` for the brand logo. ***Previous*** ```csharp // removed code for brevity BrandSettings brandSettings = new BrandSettings() { BrandLogo = new DocumentFileBytes { ContentType = "image/png", FileName = "D:/SyncfusionLogo.png", }, }; ``` ***Now*** ```csharp // removed code for brevity BrandSettings brandSettings = new BrandSettings() { BrandLogo = new ImageFileBytes { ContentType = "image/png", FileBytes = File.ReadAllBytes("D:/SyncfusionLogo.png"), }, }; ``` ### April 9, 2024-Beta **Breaking change** - The datatype for `BrandLogo` in the `BrandSettings` class has been updated from `IDocumentFile` to `IImageFile`. This change enables the flexibility to pass instances such as `ImageFilePath`, `ImageFileBytes`, or `ImageFileStream` for the brand logo. ***Previous*** ```csharp // removed code for brevity BrandSettings brandSettings = new BrandSettings() { BrandLogo = new DocumentFileBytes { ContentType = "image/png", FileName = "D:/SyncfusionLogo.png", }, }; ``` ***Now*** ```csharp // removed code for brevity BrandSettings brandSettings = new BrandSettings() { BrandLogo = new ImageFileBytes { ContentType = "image/png", FileBytes = File.ReadAllBytes("D:/SyncfusionLogo.png"), }, }; ``` ### April 4, 2024 **Feature** - The `cursor` property has been included in the Document List API response. ### April 4, 2024-Beta **Feature** - The `cursor` property has been included in the Document List API response. ### April 3, 2024 **Bug Fix** - The issue of signer's language set in the template not being preserved when sending the document using the template has been fixed. **Features** - Added support for edit template API to update an existing template properties. - Provided next cursor support for the BoldSign API to enable pagination. This feature is necessary for fetching the next set of documents beyond 10,000 records. - List Documents - List Team Documents - List Behalf Documents ### April 3, 2024-Beta **Bug Fix** - The issue of signer's language set in the template not being preserved when sending the document using the template has been fixed. **Feature** - Provided next cursor support for the BoldSign API to enable pagination. This feature is necessary for fetching the next set of documents beyond 10,000 records. - List Documents - List Team Documents - List Behalf Documents ### March 18, 2024 **Features** Provided support to the following using the BoldSign API: - Added support for Get list of contacts. - Added support for Create list of contacts. - Added support for Update contacts. - Added support for Delete contacts. ### March 11, 2024 **Features** - Added support for Identity Verification in document send and template create APIs. - Added support for the Identity Verification report API to fetch the signer-uploaded document report. - Added support for the Identity Verification image API to fetch the images uploaded by the signer for identity verification. - Added support for Embedded Manual Verification to manually review uploaded documents that have failed verification. ### February 8, 2024 **Feature** - Added support to provide the "Time Format" option for the Date Signed field. ### February 8, 2024-Beta **Feature** - Added support to provide the "Time Format" option for the Date Signed field. ### January 31, 2024 **Feature** - Support to allow signers to add fields by dragging and dropping them into the document during the signing process is added. ### January 31, 2024-Beta **Feature** - Support to allow signers to add fields by dragging and dropping them into the document during the signing process is added. ### January 24, 2024 **Feature** - Added `idPrefix` and `restrictIdPrefixChange` properties to custom field APIs for creation, editing, and listing. **Breaking changes** ***1. Required Label Field in Templates*** - Now, if a template has a required label field with an empty value, you must set a value when sending the document using the template API, using the existing form field property. Alternatively, you can change the label field to a non-required field in the created template. - For more information, refer to the following links: - [Send Document from Template by Filling Existing Fields (US Region)](https://developers.boldsign.com/how-to-guides/send-document-from-template-by-filling-existing-fields/?region=us) - [Send Document from Template by Filling Existing Fields (EU Region)](https://developers.boldsign.com/how-to-guides/send-document-from-template-by-filling-existing-fields/?region=eu) ***2. Dropdown Field Support in AutoDetect Field*** - We have added support for dropdown fields within AutoDetect fields. If the editable PDF form field contains a dropdown, it will be automatically converted into a BoldSign Dropdown form field. ### January 11, 2024 **Features** - Added support to add metadata while creating a user. - Added support to update metadata of existing users. ## 2023 ### December 20, 2023 **Feature** - Added `RedirectUrl` property in sender identity create, update, list, and webhook events. ### December 20, 2023-Beta **Feature** - Added `RedirectUrl` property in sender identity create, update, list, and webhook events. ### December 14, 2023 **Features** - Label support for the RadioButton form field has been added. - Added `AllowNewFiles` and `AllowModifyFiles` options to control file addition and modification permissions for sender when creating templates and embedded templates. - Updated the template and sender identity webhook event models to support the new properties: `AllowNewFiles`, `AllowModifyFiles`, and `BrandId`. ### December 14, 2023-Beta **Features** - Label support for the RadioButton form field has been added. - Added `AllowNewFiles` and `AllowModifyFiles` options to control file addition and modification permissions for sender when creating templates and embedded templates. - Updated the template and sender identity webhook event models to support the new properties: `AllowNewFiles`, `AllowModifyFiles`, and `BrandId`. ### December 6, 2023 **Bug Fix** - The error message will no longer appear when setting both the title and documentInfo through the API and SDK. ### December 6, 2023-Beta **Bug Fix** - Eliminate the error message that occurs when setting both the title and documentInfo through the API and SDK. ### November 23, 2023 **Features** - Support for AutoDetect fields has been added to the create and CreateEmbeddedTemplateUrl template APIs. - Support to allow signers to add fields by dragging and dropping them into the document during the signing process is added. ### November 23, 2023-Beta **Feature** - Support for AutoDetect fields has been added to the create and CreateEmbeddedTemplateUrl template APIs. ### November 8, 2023 **Improvements** - Template creation no longer requires mandatory form fields. - Updated the 403 API response exception message to be more descriptive. ### November 8, 2023-Beta **Improvements** - Template creation no longer requires mandatory form fields. - Updated the 403 API response exception message to be more descriptive. ### October 24, 2023 **Feature** - Support to enable/disable the `Decline` and `Save` option in the signing page when creating or editing a brand. ### October 12, 2023 **Features** - Support to send a signature request link through SMS is added. - Implemented support to prevent outdated warnings during constructor initialization for DocumentInfo, DocumentSigner, Roles, and TemplateRole classes. - Support to access the phone number via webhooks. ### October 12, 2023-Beta **Feature** - Implemented support to prevent outdated warnings during constructor initialization for DocumentInfo, DocumentSigner, Roles, and TemplateRole classes. ### September 21, 2023 **Feature** - Updated Newtonsoft.Json to version 13.0.3. **Breaking changes** - Deprecated the **Type** property in the **formfield** of the **GetTemplateProperties** API. Now use the **FieldType** property instead of **Type** property in formfield. - We have overhauled the signer language feature, moving from the previous approach utilizing the Language property to the new Locale property. Previously, the Language property accepted numerical values (e.g., 0, 1, 2, etc.), whereas the updated Locale property now uses standard language codes (e.g., EN for English, SP for Spanish, etc.). As a result, the Language property has been deprecated. To set the language, use the Locale property in the DocumentSigner, Roles, TemplateRoles, and DocumentInfo classes. Refer to the list below for the deprecated property and their respective alternatives. {% nestedtable showHeader="true" id="mytabletest1" %} - Deprecate Property - Previous - Now - Description --- - Language - ```csharp // removed code for brevity var documentSigner = new DocumentSigner(language: Languages.English); ``` - ```csharp // removed code for brevity var documentSigner = new DocumentSigner(); documentSigner.Locale = Locales.EN ``` - The `Language` property is now deprecated. Use Locale property in the `DocumentSigner` class instead. --- - Language - ```csharp // removed code for brevity var roles = new Roles(language: Languages.English); ``` - ```csharp // removed code for brevity var roles = new Roles(); roles.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `Roles` class instead. --- - Language - ```csharp // removed code for brevity var templateRole = new TemplateRole(language: Languages.English); ``` - ```csharp // removed code for brevity var templateRole = new TemplateRole(); templateRole.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `TemplateRole` class instead. --- - Language - ```csharp // removed code for brevity var documentInfo = new DocumentInfo(language: Languages.English); ``` - ```csharp // removed code for brevity var documentInfo = new DocumentInfo(); documentInfo.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `DocumentInfo` class instead. {% /nestedtable %} ### September 21, 2023-Beta **Breaking changes** - We have overhauled the signer language feature, moving from the previous approach utilizing the Language property to the new Locale property. Previously, the Language property accepted numerical values (e.g., 0, 1, 2, etc.), whereas the updated Locale property now uses standard language codes (e.g., EN for English, SP for Spanish, etc.). As a result, the Language property has been deprecated. To set the language, use the Locale property in the DocumentSigner, Roles, TemplateRoles, and DocumentInfo classes. Refer to the list below for the deprecated property and their respective alternatives. {% nestedtable showHeader="true" id="mytabletest" %} - Deprecate Property - Previous - Now - Description --- - Language - ```csharp // removed code for brevity var documentSigner = new DocumentSigner(language: Languages.English); ``` - ```csharp // removed code for brevity var documentSigner = new DocumentSigner(); documentSigner.Locale = Locales.EN ``` - The `Language` property is now deprecated. Use Locale property in the `DocumentSigner` class instead. --- - Language - ```csharp // removed code for brevity var roles = new Roles(language: Languages.English); ``` - ```csharp // removed code for brevity var roles = new Roles(); roles.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `Roles` class instead. --- - Language - ```csharp // removed code for brevity var templateRole = new TemplateRole(language: Languages.English); ``` - ```csharp // removed code for brevity var templateRole = new TemplateRole(); templateRole.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `TemplateRole` class instead. --- - Language - ```csharp // removed code for brevity var documentInfo = new DocumentInfo(language: Languages.English); ``` - ```csharp // removed code for brevity var documentInfo = new DocumentInfo(); documentInfo.Locale = Locales.EN; ``` - The `Language` property is now deprecated. Use Locale property in the `DocumentInfo` class instead. {% /nestedtable %} hrough the embedded custom field URL has been added. ### September 5, 2023 **Features** - Character spacing support for the Textbox and Label form fields has been added. - Support for creating custom fields based on branding, along with the option to display these fields during document or template creation, has been added. - Support for manipulating custom fields using the embedded custom field URL has been added. ### September 5, 2023-Beta **Features** - Character spacing support for the Textbox and Label form fields has been added. - Support for merging multiple templates and sending them for signature has been added. - Support for manipulating custom fields t ### August 9, 2023 **Feature** - Enhanced document history functionality to include logging for Email OTP Verification, Email OTP Authentication Failure, and Enabling or Disabling Email OTP Authentication events. ### August 9, 2023-Beta **Feature** - Enhanced document history functionality to include logging for Email OTP Verification, Email OTP Authentication Failure, and Enabling or Disabling Email OTP Authentication events. ### August 8, 2023 **Feature** - Enhanced the document history functionality to encompass logging for the "Resending Email OTP" and "Resending SMS OTP" action. ### August 1, 2023 **Feature** - Support to remove the existing roles from the template while sending the document using it added. ### August 1, 2023-Beta **Feature** - Support to remove the existing roles from the template while sending the document using it added. ### July 20, 2023-Beta **Features** - Support has been added to enable the SMS authentication while creating the document or template is added. - Enhanced document history functionality to include logging for Email OTP Verification, Email OTP Authentication Failure, and Enabling or Disabling Email OTP Authentication events. **Bug Fix** - While setting the `isReadOnly` property as false in the `existingFormField`'s object is now working properly. ### June 21, 2023 **Feature** - Added IsReadOnly support to the existing form fields in create document from template API. ### July 13, 2023 **Bug Fix** - While setting the `isReadOnly` property as false in the `existingFormField`'s object is now working properly. ### June 6, 2023 **Feature** - Added support to permanently delete the document through Delete Document API. ### June 6, 2023-Beta **Feature** - Added support to permanently delete the document through Delete Document API. ### May 31, 2023 **Features** - Support has been added to demonstrate the addition of fields in the designer page by using tooltips when creating a document/template through an embedded link. - Added `LastActivityDate` timestamp for `SignerDetails` in the webhook `Document` model. ### May 31, 2023-Beta **Feature** - Added `LastActivityDate` timestamp for `SignerDetails` in the webhook `Document` model. ### May 16, 2023 **Improvement** - Removed `RestSharp` dependency and migrated to `HttpClient` for all HTTP requests. **Feature** - Updated Newtonsoft.Json to version 13.0.3. **Breaking change** - Deprecated the **Type** property in the **formfield** of the **GetTemplateProperties** API. Now use the **FieldType** property instead of **Type** property in formfield. ### April 26, 2023 **Features** - Added email notification support for sender identity users. This will allow sender identity users to receive email based on their notification settings. - Text alignment support is added for the Textbox and Label form fields. ### April 3, 2023 **Bug Fix** - An error that occurred while fetching the document details using the document's properties API after auto reminder is enabled or disabled from overview page is fixed. ### March 7, 2023 **Feature** - Added the localization support for embedded document creation, embedded template creation and embedded template edit process for the below languages, 1. Bulgarian 2. Czech 3. Danish 4. German 5. Spanish 6. French 7. Italian 8. Dutch 9. Norwegian 10. Polish 11. Portuguese 12. Romanian 13. Swedish 14. Russian ### February 16, 2023 **Improvement** - Added support to filter behalf documents using `signers` and `labels`. ### February 07, 2023 **Feature** - Added support to **Activate** and **Deactivate** users using the User Update API. **Bug Fix** - Included `OnBehalfOf` property in the webhook document model. ### February 7, 2023-Beta **Feature** - Added the localization support for embedded document creation, embedded template creation and embedded template edit process for the below languages, 1. Bulgarian 2. Czech 3. Danish 4. Italian 5. Dutch 6. Polish 7. Portuguese 8. Romanian 9. Swedish 10. Russian ### January 24, 2023 **Feature** - Support to add **Company** and **Job Title** form fields while creating the document is added. **Bug Fix** - Fixed a bug where `OnBehalfOf` property in `SendForSign` and `EmbeddedDocumentRequest` model is not included in the multipart/form-data serialization ### January 18, 2023 **Features** - Added support for creating regular and embedded templates. - Added webhook event parser for the template events. ### January 12, 2023 **Feature** - Added the localization support for signer pages and emails sent to them for the below languages, 1. Bulgarian 2. Italian 3. Danish 4. Polish 5. Portuguese 6. Czech 7. Dutch 8. Swedish 9. Russian ### January 12, 2023-Beta **Features** - Added the localization support for signer pages and emails sent to them for the below languages, 1. Bulgarian 2. Italian 3. Danish 4. Polish 5. Portuguese 6. Czech 7. Dutch 8. Swedish 9. Russian - Added the localization support for embedded document creation, embedded template creation and embedded template edit process for the below languages, 1. German 2. Spanish 3. Norwegian 4. French ## 2022 ### December 28, 2022 **Feature** - Support to create the document with conditional rules is now moved from beta to live. ### December 14, 2022 **Features** - Added support to send documents on behalf of another user. - The CommonFields property is added to the document GetProperties API. ### December 14, 2022-Beta **Features** - Support to edit the template through the embedded template link is added. - Added `onbehalfof` parameter to download attachment methods. - The CommonFields property is added to the both document and template GetProperties API. ### November 30, 2022 **Features** - Text tag support is added for the Attachment, Hyperlink and Image form fields. - Added **DraftCreated** and **TemplateDraftCreated** webhook events for both Document and Template. **Breaking change** - The AllowedFileTypes property in the AttachmentInfo class is deprecated now. Please use **AcceptedFileTypes** instead of this. ### November 15, 2022 **Feature** - Added Norwegian localization for signer pages and emails sent to them. ### November 1, 2022 **Features** - Added support to provide **DataSyncTag** option for Textbox, Image, Checkbox, Editable Date, and Dropdown fields. - Added support to provide **DefaultValue** and **IsReadOnly** options for Textbox, Image, Checkbox, Radio buttons, and Editable Date fields. - Added support to list teams based on search text in API. - Support to create the document with conditional rules is added. **Type change** - **HideDocumentId** in send document and send template is now changed to **bool?** from **bool**. If it is **null**, then the value will be inherited from the business profile settings. **Deprecated** - **ShowSendButton** in the create embedded template method property is now deprecated and **ShowCreateButton** is introduced in its place. ### October 18, 2022 **Features** - Support to set different types of expiry dates while creating the document is added. **Breaking changes** - The **SendForSign** and **SendForSignFromTemplate** class property **ExpiryDays** is now deprecated. Please use ExpiryValue instead. **Send document** ***Previous*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { ExpiryDays = 30, }; ``` {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: multipart/form-data' \ -F 'ExpiryDays=30' \' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { ExpiryDateType = ExpiryDateType.Days, ExpiryValue = 60, }; ``` {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: multipart/form-data' \ -F 'ExpiryDateType=Days' \' -F 'ExpiryValue=60' \' # removed code for brevity ``` {% /codetab %} **Send using template** ***Previous*** ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ExpiryDays = 30, }; ``` {% codetab id="codetab3" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=templateId' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "expiryDays": "30" # removed code for brevity }' ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ExpiryDateType = ExpiryDateType.Days, ExpiryValue = 60, }; ``` {% codetab id="codetab4" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=templateId' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "expiryDateType": "Days", "expiryValue": 60 # removed code for brevity }' ``` {% /codetab %} ### October 18, 2022-Beta **Feature** - Support to set different types of expiry dates while creating the document is added. **Breaking change** - The **SendForSign** and **SendForSignFromTemplate** class property **ExpiryDays** is now deprecated. Please use ExpiryValue instead. **Send document** ***Previous*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { ExpiryDays = 30, }; ``` {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: multipart/form-data' \ -F 'ExpiryDays=30' \' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { ExpiryDateType = ExpiryDateType.Days, ExpiryValue = 60, }; ``` {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: multipart/form-data' \ -F 'ExpiryDateType=Days' \' -F 'ExpiryValue=60' \' # removed code for brevity ``` {% /codetab %} **Send using template** ***Previous*** ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ExpiryDays = 30, }; ``` {% codetab id="codetab3" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=templateId' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "expiryDays": "30" # removed code for brevity }' ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ExpiryDateType = ExpiryDateType.Days, ExpiryValue = 60, }; ``` {% codetab id="codetab4" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=templateId' \ -H 'accept: application/json' \ -H 'X-API-KEY: API_Key' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "expiryDateType": "Days", "expiryValue": 60 # removed code for brevity }' ``` {% /content %} ### October 11, 2022 **Features** - Added support for get template properties. - Added support to parse and verify webhook HMAC signature. ### October 4, 2022 **Feature** - Added Romanian localization for signer pages and emails sent to them. ### September 29, 2022 **Features** - Support to create the document with dropdown field is added. - Added support for download template. ### September 20, 2022-Beta **Feature** - Added client side input validations for the create template API. **Bug Fix** - Fixed a bug that lead to the null exception in create template API while using text tags without form fields. ### September 12, 2022-Beta **Features** - Added support for creating regular and embedded templates. - Added support to get the list of documents sent on behalf of others. - Added webhook event parser for the template events. ### September 6, 2022 **Features** - Support to download the attachment using the BoldSign API is added. - The **CompletedEmailType** property has been removed from the **BrandSettings** and **ViewBrandDetails** classes in versions v4.7.6 and v4.8.4-beta. Instead, use the **EmailSignedDocument** property. Please find the code snippet, ```js var brandSettings = new BrandSettings() { BrandName = "BoldSign", BrandLogo = new DocumentFileBytes { ContentType = "image/png", FileName = "BoldSign_Logo.png", }, EmailSignedDocument = EmailSignedDocument.DocumentLink, }; ``` ### August 23, 2022 **Features** - Added "Label" to the DocumentEvent webhook payload. - Added support to provide the "DataSyncTag" option for the Textbox field. ### August 17, 2022-Beta **Features** - Added support to extend document expiration. - Support to set the document timezone for branding using the BoldSign API is added. ### August 16, 2022 **Features** - Added support to extend document expiration. - Support to set the document timezone for branding using the BoldSign API is added. ### August 9, 2022-Beta **Features** - Added support for sender identity webhook events. - Added support to parse the document and sender identity webhook events. - Option to suppress or turn off the PDF signed document attachment in the completion email is added. ### August 9, 2022 **Feature** - The option to suppress or turn off the PDF signed document attachment in the completion email is added. ### August 2, 2022 **Bug Fix** - FormFields property is added to the Signers of the GetProperties API for the draft document. ### July 27, 2022 **Bug Fix** - An error that occurred while fetching the document details using the document's properties API is fixed. ### July 13, 2022-Beta **Feature** - Support to send documents on behalf of another user. ### June 28, 2022 **Features** - Support to add and remove authentication through the BoldSign API is added. - Support to create the document with a hyperlink field is added. - Added support to provide values to the textbox and label fields in the text tag definition. ### June 21, 2022 **Feature** - Support to create the document with an editable date field through the BoldSign API is added. ### June 7, 2022 **Features** - Support to create, edit, delete and list the branding through BoldSign API is added. - Support to get the list of team documents through the BoldSign API. - Added French localization for signer pages and emails sent to them. ### May 31, 2022 **Features** - Provided support to the following through the BoldSign API: 1. Add tags to the document. 2. Delete tags in a document. ### May 17, 2022 **Features** - Provided support to the following through the BoldSign API: 1. Create list of users. 2. Update user role. 3. Resend the user invitation. 4. Cancel the user invitation. 5. Get list of users. 6. Get properties of user. 7. Create a team. 8. Update a team. 9. Get list of teams. 10. Get a particular team's details. ### May 10, 2022 **Feature** - Support for changing the recipient email of a document through the BoldSign API has been added. ### April 26, 2022 **Bug Fix** - {% highlight %} Could not load file or assembly RestSharp, Version=106.15.0.0 {% /highlight %} exception will no longer occur, while using the BoldSign API SDK. **Feature** - Support for creating the document with an image and attachment field through the BoldSign API has been added. ### April 20, 2022-Beta **Feature** - Added German & Spanish localization for signer pages and emails sent to them. **Improvement** - Upgraded the RestSharp version from "106.11.7" to "106.15.0". ### April 12, 2022 **Breaking changes** - The textbox field property **ValidationCustomRegexDescription** has been renamed as **ValidationCustomRegexMessage**. - We have reverted the breaking change,**while setting the ValidationType as CustomRegex for TextBoxField, ValidationCustomRegexMessage is a mandatory field**, made in the version 3.5.0. ### April 6, 2022 **Feature** - Support for adding description while setting the validation type to Regex for the text box is added. **Breaking change** - From BoldSign API SDK version 3.5.0, while setting the validationType as CustomRegex for TextBoxField, validationCustomRegexDescription is a mandatory field. So If you are using a version less than 3.5.0, validationCustomRegexDescription will not be available, and you need to upgrade to above 3.4.0 version. ### March 22, 2022 **Feature** - The audit action EditRecipient has been added to the document history. ### February 8, 2022 **Features** - When sending an Embed document request with SendViewOption as FillingPage, the Signer and FormFields properties are now optional. - When sending an Embed document request with SendViewOption as PreparePage, the FormField properties are now optional. - EnablePrintAndSign, EnableReassign and EnableSigningOrder property is now supported in send template , send document and Get properties API. - Template TransmitType property is now supported in Get document List API. - DisableExpiryAlert property is now supported in send template , send document and Get document property API. - TemplateType property is now supported in Get template list API. - ApplicationId, HideDocumentId properties are now supported in Get document property API. - Added In-Person signer support for documents created using the send document and send template API requests. **Bug fix** - Fixed radio button rendering issue in PDF when created from the API request. ### February 1, 2022 **Feature** - Added text tag support for documents created using API requests. ### January 25, 2022 **Breaking changes** - Name property is now deprecated. Use Id in the FormField property instead. ***Previous*** ```csharp // removed code for brevity var formfield = new FormField(name: "name"); ``` {% codetab id="codetab1" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'Signers[0][FormFields][0][Name]=Name' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity var formfield = new FormField(id: "unique_id"); ``` {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'Signers[0][FormFields][0][Id]=unique_id' \ # removed code for brevity ``` {% /codetab %} - Name property is removed. Use Id in the ExistingFormField property instead. ***Previous*** ```csharp // removed code for brevity var existingFormField = new ExistingFormField(name: "unique_id"); ``` {% codetab id="codetab3" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "roles": ["existingFormFields": [{"name":"name",value:"value"}]]}' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity var existingFormField = new ExistingFormField(id: "unique_id"); ``` {% codetab id="codetab4" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "roles": ["existingFormFields": [{"id":"unique_id",value:"value"}]]}' # removed code for brevity ``` {% /codetab %} ## 2021 ### October 29, 2021 **Feature** - Added support for sending documents from the public URL. ### October 19, 2021 **Features** - Added support for API key basic authentication. - Added support to get the balance API credits. ### September 28, 2021 **Features** - New audit actions are added to the document history. 1. Embedded signed 2. Embedded reviewed 3. Generated embedded sign link 4. Expiry date extended ### September 14, 2021 **Features** - Added support to set expiry days from the template API. ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ExpiryDays = 5, }; ``` {% codetab id="codetab1" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "expiryDays":5}' # removed code for brevity ``` {% /codetab %} - Added support to set the hide document id from the template API. ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { HideDocumentId = true, }; ``` {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "hideDocumentId": true}' # removed code for brevity ``` {% /codetab %} - Added support to set reminder settings from the template API. ```csharp // removed code for brevity SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { ReminderSettings = new ReminderSettings() { EnableAutoReminder = true, ReminderDays = 1, ReminderCount = 10, }, }; ``` {% codetab id="codetab3" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "reminderSettings":{"enableAutoReminder": true, "reminderDays":1,"reminderCount":10}}' # removed code for brevity ``` {% /codetab %} - Added support to set cc details from the template API. ```csharp // removed code for brevity // Creating a CC instance var cc = new DocumentCC(emailAddress: "cc@mail.com"); // Adding the CC to the collection. var documentCCs = new List { cc }; SendForSignFromTemplate sendForSignFromTemplate = new SendForSignFromTemplate() { CC = documentCCs, }; ``` {% codetab id="codetab4" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/send?templateId=aa74e915-76cf-4a6c-bf01-3e3f1855f235' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "cc":[{"emailAddress":"cc@mail.com"}]}' # removed code for brevity ``` {% /codetab %} ### August 27, 2021-Beta **Features** - Added embedded request support for documents and templates. - Added support to hide document ID in PDF. **Bug fix** - Fixed organization members are unable to be authenticated in the OAuth2 authorization code flow. ### August 24, 2021 **Bug fix** - DisableEmails property is added to the SendUsingTemplate API. ### August 23, 2021 **Features** - Added embedded request support for documents and templates. - Added support for embedded request links that are valid till. ### August 17, 2021 **Bug Fix** - The Timestamp property is added to the document history of the GetProperties API. ### July 27, 2021 **Bug Fix** - Exception is no longer thrown when getting the document properties. ### July 14, 2021 **Features** - Added support for adding placeholder to the text box field. - Added support for getting the Application Id from document properties. - Added support for providing the pre-defined and custom regex validation to text box field. - Added support for adding and listing documents based on labels. - Added support for providing date format for the date signed field. **Breaking changes** - EnableEmbeddedSigning property is now deprecated. Use DisableEmails property instead. ***Previous*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { EnableEmbeddedSigning = true, }; ``` {% codetab id="codetab1"%} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'EnableEmbeddedSigning = true' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity SendForSign sendForSign = new SendForSign() { DisableEmails = true, }; ``` {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'DisableEmails = true' # removed code for brevity ``` {% /codetab %} - Group Name property is removed. Use Group Name in the RadioButton field instead ***Previous*** ```csharp // removed code for brevity FormField formField = new FormField() { GroupName = "enter the groupname" } ``` {% codetab id="codetab3" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'Signers[0][FormFields][0][GroupName]=enter the groupname' # removed code for brevity ``` {% /codetab %} ***Now*** ```csharp // removed code for brevity RadioButtonField radioButtonField = new RadioButtonField() { GroupName = "enter the groupname" } ``` {% codetab id="codetab4" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'Signers[0][FormFields][0][GroupName]=enter the groupname' # removed code for brevity ``` {% /codetab %} - Label property is removed. Use Placeholder property instead, to get placeholder value from getproperties API. ***Previous*** ```shell "formFields": [ { "label": "placeholder value" }] ``` ***Now*** ```shell "formFields": [ { "placeholder": "placeholder value" }] ``` ### April 20, 2021 **Bug fixes** - Fixed assignee based form field color issue in the send document API. - Fixed template listing issue in API. - Fixed an issue with filling existing form fields when sending documents for signing using the template API. **Features** - Added support for search templates. - Added support for getting the Brand Id from document properties. - Added support to fill the existing form fields by name. - Added support to notify the failure to send document using {% highlight %} SendFailed {% /highlight %} webhook event. **Breaking changes** - Changed BoldSign.Client namespace to BoldSign.Api in API SDK. - The {% highlight %} DatePicker {% /highlight %} Type has been renamed to {% highlight %} DateSigned{% /highlight %} . - The {% highlight %} Name {% /highlight %} and {% highlight %} Email {% /highlight %} Type has been removed, so the {% highlight %} Label {% /highlight %} field can be used instead. --- # File: api-overview\client-libraries.md # Client libraries BoldSign provides a set of SDKs designed to simplify e-signature integration for developers. These SDKs support multiple programming languages, making it easy to send, receive, and track signature requests within your applications. Our SDKs are maintained by the BoldSign development team and offer the most efficient way to integrate e-signature functionality with your applications. - {% customlink href="/sdks/net-sdk/" text=".NET (C#)" mode="full"/%} - {% customlink href="/sdks/python-sdk/" text="Python" mode="full"/%} - {% customlink href="/sdks/php-sdk/" text="PHP" mode="full"/%} - {% customlink href="/sdks/java-sdk/" text="Java" mode="full"/%} - {% customlink href="/sdks/node-sdk/" text="Node.js" mode="full"/%} --- # File: api-overview\developer-sandbox-account.md # Developer sandbox account The simplest way to get started is by acquiring a {% customlink href="https://account.boldsign.com/signup?planId=1076" text="free developer sandbox account" /%}. You can test out the complete BoldSign software without paying any money with the developer sandbox account. All signed documents will be watermarked and deleted automatically after 14 days of creation. You should use the developer sandbox account for either of the following purposes: - Testing should be done in a risk-free setting. - Building and developing integration with BoldSign is followed by basic app maintenance. If you have any questions, contact us directly at {% customlink href="mailto:support@boldsign.com" text="support@boldsign.com" /%}. --- # File: api-overview\getting-started.md # Getting started BoldSign is an eSignature software with an intuitive RESTful API that can be accessed using any server-side programming language. It allows you to access and build your own application that interacts with the BoldSign eSignature API. We designed our REST API to be concise and straightforward. You can achieve any action with a single API call, and there is no need to make multiple API calls to send a single signature request. The BoldSign API outputs data in JSON format is stateless, and verifies each request against an API key or OAuth access token. You can manually retrieve the API key via the BoldSign Web App. The following video provides an overview of BoldSign APIs, including how to get started and its key features {% embedvideo src="https://www.youtube.com/embed/H3T-rj3lSbE" /%} ## Developer sandbox account You can completely explore and test the BoldSign features by creating a free developer sandbox account. Refer to {% customlink href="/api-overview/developer-sandbox-account/" text="this article" /%} for more details. ## Key features The following are some of the key features of BoldSign. ### Branded eSignature solution Customize the appearance for your signers by incorporating your brand's logo, colors, and legal terms. You can also add and manage multiple brands within a single account and select the appropriate brand before sending each document. {% customlink href="/branding/create-brand/" text="Read more about branding." /%} ### Embedded requesting and signing You can embed a fully customizable document sending and/or signing process within your application with custom branding and an email workflow. {% customlink href="/embedded-request/create-embedded-request-link/" text="Read more about embedded request." mode="full" /%} {% customlink href="/embedded-signing/get-embedded-signing-link/" text="Read more about embedded signing." mode="full" /%} ### Text tags Positioning signature or input fields through x- and y-coordinates in a dynamic document is a complex task even for seasoned developers. Using our text tag feature, developers can put invisible text in the place of fields, and the BoldSign API will automatically convert those to actual fields before sending. {% customlink href="/text-tags/introduction/" text="Read more about text tags." /%} ### Send document on behalf Sending documents on behalf of others is one of the most wanted features for multitenancy or SaaS software companies. This is so simple, get consent from your client and send the document on behalf of your client. {% customlink href="/documents/send-document-on-behalf/" text="Read more about on behalf document." /%} ### Templates creation The template creation process can be embedded into your application. Your users don’t need to leave your application. {% customlink href="/template/create-template/" text="Read more about templates." /%} ### Webhooks Save your computer resources by using BoldSign webhooks to listen for any changes in document statuses. Our webhooks are fault-tolerant and highly reliable. That is, even if your services are down in an unlikely event, we will retry the webhooks for 8 hours. {% customlink href="/webhooks/introduction/" text="Read more about webhooks." /%} ### Manage users & teams Manage users and teams by inviting users to the team, resending or canceling invitations, updating user details, and more. {% customlink href="/users/create-user/" text="Read more about users." mode="full"/%} {% customlink href="/teams/create-team/" text="Read more about teams." mode="full"/%} ### Manage documents Manage the documents sent out for signature, organize, download document, audit trail, delete, and more options. {% customlink href="/documents/send-document/" text="Read more about documents." /%} --- # File: api-overview\open-api-specification.md # Open API specification To describe the REST APIs, BoldSign uses the Open API specification. This {% customlink href="https://api.boldsign.com/swagger/v1/swagger.json" text="Open API specification file" /%} served as the foundation for the creation of our C# client library. Additionally, you can use it to create your own client library for any platform or coding language. You might need to re-import our Open API definition file from time to time because we occasionally update it. Read more about {% customlink href="/api-overview/client-libraries/" text="client libraries" /%} for ready-to-use SDKs. --- # File: api-overview\rate-limit.md # Rate limit BoldSign has rate limits to balance loads on the system. Both API keys and OAuth API calls follow the same rate limit system. In a live or production environment, you can make up to 2000 requests per hour per account. In sandbox mode, this limit is set at 50 requests per hour per account. The rate limits are introduced for the account level, not for the OAuth app or user level. Once the limit is reached, responses with a status of 429 "Too Many Requests" and corresponding messages will be returned. You can track your rate limit usage in the API response headers. ![Rate limit](/static/images/api-overview/ratelimit.webp) --- # File: api-overview\requests.md # Requests All requests to the BoldSign API must be made over HTTPS with TLS 1.2 or higher version for security reasons. We recommend using the JSON body format when performing API requests. In order to make a proper JSON-formatted request, make sure you provide Content-Type: application/json in HTTP request headers. Our API supports UTF-8 for character encoding. For the send document or template method, the regular form-encoded body format is also supported. --- # File: api-overview\versioning.md # Versioning Currently, we have only one stable version, denoted by the v1/ part within the API path. The beta version features will be released under the path of v1-beta/. After a specific timeline, the beta features will be moved to the stable version (v1). Additionally, the base URL varies depending on the region. - Stable version (US region): https://api.boldsign.com/v1 - Beta version (US region): https://api.boldsign.com/v1-beta - Stable version (EU region): https://api-eu.boldsign.com/v1 - Beta version (EU region): https://api-eu.boldsign.com/v1-beta - Stable version (CA region): https://api-ca.boldsign.com/v1 - Beta version (CA region): https://api-ca.boldsign.com/v1-beta - Stable version (AU region): https://api-au.boldsign.com/v1 - Beta version (AU region): https://api-au.boldsign.com/v1-beta --- # File: authentication\api-key.md # API key The API key authentication is a basic authentication mechanism. It is easy and can be used as an alternative to OAuth for connecting to and authenticating BoldSign's API services. However, make sure that API is part of your plan for generating the API Key. {% note %}You can generate up to 4 API keys at once. The generated API keys can be either in the Live or Sandbox environment but no more than 2 in a single environment.{% /note %} By default, all the scopes will be included when you generate an API key. Currently, this is not customizable. ## Generate API key 1. Navigate to the API menu item in the app's left navigation pane and select `API Key.` ![API-Key-Step 1](/static/images/authentication/api-key-step1.webp) 2. Click the `Generate API Key` button. 3. You will be prompted with the `Generate API Key` dialog. ![API-Key-Step 3](/static/images/authentication/api-key-step3.webp) 4. Proceed by clicking the `Generate Token` button. 5. Then, copy the API key needed to configure in the HTTP request header from your application. ![API-Key-Step 5](/static/images/authentication/api-key-step5.webp) ## Usage To make an HTTP request with API Key, the request header must include the `X-API-KEY.` Use the generated API key in the following format. {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/list' -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var templateList = templateClient.ListTemplates(1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) template_list = template_api.list_templates(page=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $template_list = $template_api->listTemplates($page = 1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); int page = 1; TemplateRecords templateList = templateApi.listTemplates(page, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { TemplateApi } from "boldsign"; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const templateList = templateApi.listTemplates(1); ``` {% /codetab %} ![API-key-usage](/static/images/authentication/key-usage.webp) ## API key validity When creating an API key in BoldSign, you can set an expiration date by enabling the `Token Validity` option. ![API-key-token](/static/images/authentication/api-key-token1.webp) **Note**: If no expiry date is set, the API key will remain valid until it is manually deleted. Once deleted, the API key will expire automatically and can no longer be used. --- # File: authentication\introduction.md # Authentication Introduction The BoldSign API requires authentication for all endpoints. Both an OAuth2 bearer token and an API Key are accepted by the API endpoints. You must have a BoldSign subscription before you can authenticate to the API. All plans, including the free plan, provide access to the sandbox API. All API requests must be made using `HTTPS.` Any requests made through plain HTTP will result in failure. Similarly, API requests that do not include authentication will also fail. ## Scopes In the BoldSign API, certain endpoints require one or more scopes or permissions to be accessed. {% nestedtable %} - {% arguments name="BoldSign.Documents.All" /%} - Used to grant full control over the document resources. --- - {% arguments name="BoldSign.Documents.Write" /%} - Used to provide only the write document permission, such as remind, change access, and more. --- - {% arguments name="BoldSign.Documents.Delete" /%} - Used to grant only the delete document permission, such as delete document. --- - {% arguments name="BoldSign.Documents.Create" /%} - Used to grant only the create document permission, such as send, embedded request. --- - {% arguments name="BoldSign.Templates.All" /%} - Used to grant full control to the template resources. --- - {% arguments name="BoldSign.Templates.Read" /%} - Used to grant only the read template permission, such as a list. --- - {% arguments name="BoldSign.Templates.Write" /%} - Used to grant only the write template permission. --- - {% arguments name="BoldSign.Templates.Delete" /%} - Used to grant only the delete template permission for deleting the template. --- - {% arguments name="BoldSign.Templates.Create" /%} - Used to grant only the create template permission, such as create and embedded create. --- - {% arguments name="BoldSign.Users.All" /%} - Used to provide complete control over the user resources. --- - {% arguments name="BoldSign.Users.Read" /%} - Used to grant only the read user permission, such as list, get, etc. --- - {% arguments name="BoldSign.Users.Write" /%} - Used to grant only the write user permission, such as update, resend, etc. --- - {% arguments name="BoldSign.Teams.All" /%} - Used to provide complete control over the teams' resources. --- - {% arguments name="BoldSign.Teams.Read" /%} - Used to grant only the read team permission, such as list, get, etc. --- - {% arguments name="BoldSign.Teams.Write" /%} - Used to grant only the write team permission, such as update. --- - {% arguments name="BoldSign.SenderIdentity.All" /%} - Used to grant full control to the sender identity resources. --- - {% arguments name="BoldSign.SenderIdentity.Create" /%} - Used to grant only the sender identity create permission. --- - {% arguments name="BoldSign.SenderIdentity.Read" /%} - Used to grant only the read sender identity permission, such as a list. --- - {% arguments name="BoldSign.SenderIdentity.write" /%} - Used to grant only the write sender identity permission, such as update, resend, etc. --- - {% arguments name="BoldSign.SenderIdentity.Delete" /%} - Used to grant only the delete sender identity permission to delete the sender identities. --- - {% arguments name="offline_access" /%} - Used to request refresh token (Supported only in the authorization code flow). {% /nestedtable %} ## Sandbox vs Live {% nestedtable %} - It permits a maximum of 50 API requests per hour. - It offers a higher limit of 2000 API requests per hour. --- - The document created using the sandbox environment will be automatically deleted after 14 days. - The documents created using live environments are never deleted automatically. --- - The generated PDFs will have test watermarks that are not legally valid. - The generated PDFs will have no watermarks, and they are legally valid. {% /nestedtable %} --- # File: authentication\oauth-2-0.md # OAuth2 OAuth2 is a protocol allowing applications to authenticate with the BoldSign API, and the security implementation is based on the {% customlink href="https://openid.net/connect/" text="OpenID Connect framework" /%}. To obtain an access token and make calls to the API, you can use any of BoldSign's supported OAuth2 authentication workflows, such as Client Credential or Authorization Code Grant. ## Create OAuth2 application In this type of authentication method, you can use an application and an individual user's login credentials to obtain a token. Then, you can use that token as credentials within your application for API requests on behalf of that user or as a specific user. ### Prerequisites 1. To work with the BoldSign API, make sure the API is available as part of your {% customlink href="https://boldsign.com/electronic-signature-pricing/" text="BoldSign Pricing" /%} plan. 2. You should be an account admin to create a developer application. ### Acquire app credentials 1. Navigate to the API menu item in the app's left navigation pane and select `OAuth Apps.` 2. Click the `Create App` button in the top right corner. 3. You will be prompted with the Create Application dialog box. It is possible to configure separate credentials for sandbox and live production environments. ![OAuth-Step 1](/static/images/authentication/oauth-step1.png) 4. Specify the `Application Name` and `Client Secret Validity` details. 5. In the redirect URL section, input the required URL. For instance, local development URLs could be `http://localhost:3000/redirect`, while URLs for live applications might resemble `https://yourapp.com/redirect`. 6. The `Billing option` is used to reduce the document credits from the user's account or your account. If you choose the `Charge my user's account` option, any charges incurred from transactions will be billed directly to the user's account. If you prefer to handle the charges directly, select the `Charge my account` option, and the charges will be billed to your account. 7. Then, proceed by clicking the `Save` button. 8. You will now be redirected to the App details page of your new API application. 9. You need to copy the Client ID and Client Secret Key and store them for future reference. These keys are required to configure the OAuth Client in your app. ## Authorization code flow In the authorization code grant flow, your client app integration receives consent from a person to act on their behalf before receiving an authorization code that can be exchanged for an access token, which is necessary to make API calls. ### Obtain authorization code The code is obtained from the BoldSign authentication server when the user reviews the information that the client is requesting either to approve or deny the authorization request. To get this consent, you need to redirect the user to the following URI with your client credentials and a PKCE challenge. If you wish to maintain access to the token indefinitely, then it's necessary to include the `offline_access` scope to the parameter in the URI. An example of a user consent screen page will appear, as shown in the following image. ![Consent Screen](/static/images/authentication/consent-screen.webp) {% nestedtable %} - {% arguments name="response_type" /%}{% batch datatype="string" /%}{% required /%} - Determines the type of authorization response. For the **Authorization Code Flow**, this must be set to `code`, indicating that the authorization server will return an authorization code to be exchanged for an access token. --- - {% arguments name="client_id" /%}{% batch datatype="string" /%}{% required /%} - The client ID that is assigned to your OAuth2 application. --- - {% arguments name="state" /%}{% batch datatype="string" /%} - A random value of string will be provided back in the redirect URL response to keep track of the session or to prevent initiation from unsolicited flows. --- - {% arguments name="scope" /%}{% batch datatype="string" /%}{% required /%} - Specify the space-delimited string of scopes. The scopes `openid`, `profile`, and `email` should be specified to limit and grant specific permissions to your access token. Include `offline_access` to receive a Refresh Token. The scopes required to access the BoldSign API endpoints will be available {% customlink href="https://developers.boldsign.com/authentication/introduction/?region=us#scopes" text="here" /%}. --- - {% arguments name="redirect_uri" /%}{% batch datatype="string" /%}{% required /%} - The redirect URI that your client wants to redirect to. The URI should also be configured in your OAuth2 application in the BoldSign. --- - {% arguments name="code_challenge" /%}{% batch datatype="string" /%}{% required /%} - A high entropy random string generated from the `code_verifier.` (PKCE, {% customlink href="https://oauth.net/2/pkce/" text="oauth" /%}). --- - {% arguments name="code_challenge_method" /%}{% batch datatype="string" /%}{% required /%} - Both `plain` and `S256` challenge methods are supported. (PKCE, {% customlink href="https://oauth.net/2/pkce/" text="oauth" /%}). {% /nestedtable %} **URI syntax** ```shell https://account.boldsign.com/connect/authorize ?response_type=code &client_id=YOUR_CLIENT_ID &state=YOUR_REQUEST_STATE &scope=YOUR_SPACE_DELIMITED_SCOPES &redirect_uri=YOUR_REDIRECT_URI &code_challenge=YOUR_CODE_CHALLENGE &code_challenge_method=S256 ``` **URI example** ```shell https://account.boldsign.com/connect/authorize ?response_type=code &client_id=596f0268... &state=YTc2MzVhM2ItNGYyY... &scope=openid profile email offline_access BoldSign.Documents.All &redirect_uri=https://yourapp.com/callback &code_challenge=b7uDNmQ... &code_challenge_method=S256 ``` Your user will be prompted to sign in to their account and give consent for your app to make calls on their behalf. After selecting Allow, the website will be redirected to your configured redirect URI. An example is provided as follows. **Example response callback** ```shell https://yourapp.com/callback ?state=YTc2MzVhM2... &code=1CB0E6C996B7... &scope=openid profile email offline_access BoldSign.Documents.All &session_state=7kjNqht7N... ``` ### Obtain access token {% post /%} {% path text="https://account.boldsign.com/connect/token" /%} After you have obtained the authorization code from the redirected URI query parameter code, you can use this code to exchange it for the access token by sending a POST request. Also, the `code_verifier` that was used to compute the `code_challenge` in the previous authorization request is needed to successfully obtain the access token. {% nestedtable %} - {% arguments name="grant_type" /%}{% batch datatype="string" /%}{% required /%} - The value should always be `authorization_code` while exchanging the authorization code for access token. --- - {% arguments name="client_id" /%}{% batch datatype="string" /%}{% required /%} - The client ID allocated to your OAuth2 application. The value must be URL encoded before being sent to the server. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="client_secret" /%}{% batch datatype="string" /%}{% required /%} - The client secret that was generated for your OAuth2 application. The value must be URL encoded before being sent to the server. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="code" /%}{% batch datatype="string" /%}{% required /%} - The `code` that you obtained from the URL query parameter in the response to the authorize request. --- - {% arguments name="redirect_uri" /%}{% batch datatype="string" /%}{% required /%} - The same redirect URI that was sent in the authorize request. --- - {% arguments name="code_verifier" /%}{% batch datatype="string" /%}{% required /%} - The code verifier that matches to the code_challenge used in the authorize request (PKCE, {% customlink href=" https://oauth.net/2/pkce/" text="oauth" /%}). {% /nestedtable %} **Request syntax** {% codetab id="codetab1" %} cURL ```shell curl -X POST 'https://account.boldsign.com/connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \ --data-urlencode 'code=YOUR_AUTH_CODE' \ --data-urlencode 'redirect_uri=YOUR_REDIRECT_URI' \ --data-urlencode 'code_verifier=YOUR_CODE_VERIFIER' ``` C# ```csharp using var httpClient = new HttpClient(); var parameters = new List> { new KeyValuePair("grant_type", "authorization_code"), new KeyValuePair("client_id", "YOUR_CLIENT_ID"), new KeyValuePair("client_secret", "YOUR_CLIENT_SECRET"), new KeyValuePair("code", "YOUR_AUTH_CODE"), new KeyValuePair("redirect_uri", "YOUR_REDIRECT_URI"), new KeyValuePair("code_verifier", "YOUR_CODE_VERIFIER"), }; using var request = new HttpRequestMessage() { RequestUri = new Uri("https://account.boldsign.com/connect/token"), Content = new FormUrlEncodedContent(parameters), Method = HttpMethod.Post, }; using var response = await httpClient .SendAsync(request) .ConfigureAwait(false); var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); response.EnsureSuccessStatusCode(); var token = JsonConvert.DeserializeObject>(responseBody); var accessToken = token["access_token"]; var refreshToken = token["refresh_token"]; ``` Python ```python import json import requests import http conn = http.client.HTTPSConnection("account.boldsign.com") payload = "grant_type=authorization_code"+ \ "&client_id=YOUR_CLIENT_ID" + \ "&client_secret=YOUR_CLIENT_SECRET" + \ "&code=YOUR_AUTH_CODE" + \ "&redirect_uri=YOUR_REDIRECT_URI" + \ "&code_verifier=YOUR_CODE_VERIFIER" headers = {'content-type': "application/x-www-form-urlencoded"} conn.request("POST", "/connect/token", payload, headers) res = conn.getresponse() data = res.read() jsonData = json.loads(data.decode("utf-8")) result=jsonData["access_token"] print(result) ``` NodeJS ```js const axios = require('axios'); const response = await axios.post( ' https://account.boldsign.com/connect/token', new URLSearchParams({ 'grant_type': 'authorization_code', 'client_id': 'YOUR_CLIENT_ID', 'client_secret': 'YOUR_CLIENT_SECRET', 'code': 'YOUR_AUTH_CODE', 'redirect_uri': 'YOUR_REDIRECT_URI', 'code_verifier': 'YOUR_CODE_VERIFIER' }) ); ``` {% /codetab %} **Example response** ```json { "id_token": "eyJhbGciOiJSUzI1...", "access_token": "eyJhbGciOasd...", "expires_in": 3600, "token_type": "Bearer", "refresh_token": "7C09CCA...", "scope": "openid profile email offline_access BoldSign.Documents.All" } ``` ### Refresh token {% post /%}{% path text="https://account.boldsign.com/connect/token" /%} After the access token expires, you can use the refresh token to obtain a fresh one. Refresh tokens may last longer than access tokens, depending on the OAuth app configuration (absolute or sliding). It's noteworthy that as long as the refresh token remains active, users are not obligated to log in again. The refresh token supports two types of expiration: absolute and sliding expiration. ![Refresh token expiration](/static/images/authentication/refresh-token.webp) The absolute expiration, which is selected as the default type when creating an OAuth application. The refresh token will always expire after 30 days in this case, and there will be no option to extend this period once the token is generated. Once the refresh token has expired after 30 days, your application users must re-authenticate with BoldSign. The sliding expiration for refresh tokens will also lapse after 30 days. However, it will be automatically extended by an additional 30 days each time you obtain a new access token using the refresh token as long as your current access token remains valid. You can change the expiration mode at any time by going to the [OAuth Apps](https://app.boldsign.com/api-management/oauth-apps/) page. > Important note: Refresh tokens can only be used once. When you use a refresh token to generate a new access token, you will also receive a new refresh token. The old refresh token is no longer valid. {% nestedtable %} - {% arguments name="grant_type" /%}{% batch datatype="string" /%}{% required /%} - The value should always be `refresh_token` while using the refresh token to get a new access token. --- - {% arguments name="client_id" /%}{% batch datatype="string" /%}{% required /%} - The client ID assigned to your OAuth2 application. Before being sent to the server, the value must be URL encoded. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="client_secret" /%}{% batch datatype="string" /%}{% required /%} - The client secret that was generated for your OAuth2 application. The value must be URL encoded before sent to the server. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="refresh_token" /%}{% batch datatype="string" /%}{% required /%} - The refresh token that you acquired from the token exchange. {% /nestedtable %} **Request syntax** {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://account.boldsign.com/connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=refresh_token' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \ --data-urlencode 'refresh_token=YOUR_REFRESH_TOKEN' ``` C# ```csharp using var httpClient = new HttpClient(); var parameters = new List> { new KeyValuePair("grant_type", "refresh_token"), new KeyValuePair("client_id", "YOUR_CLIENT_ID"), new KeyValuePair("client_secret", "YOUR_CLIENT_SECRET"), new KeyValuePair("refresh_token", "YOUR_REFRESH_TOKEN"), }; using var request = new HttpRequestMessage() { RequestUri = new Uri("https://account.boldsign.com/connect/token"), Content = new FormUrlEncodedContent(parameters), Method = HttpMethod.Post, }; using var response = await httpClient .SendAsync(request) .ConfigureAwait(false); var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); response.EnsureSuccessStatusCode(); var token = JsonConvert.DeserializeObject>(responseBody); var accessToken = token["access_token"]; var refreshToken = token["refresh_token"]; ``` Python ```python import json import requests import http conn = http.client.HTTPSConnection("account.boldsign.com") payload = "grant_type=refresh_token" + \ "&client_id=YOUR_CLIENT_ID" + \ "&client_secret=YOUR_CLIENT_SECRET "+ \ "&refresh_token=YOUR_REFRESH_TOKEN" headers = {'content-type': "application/x-www-form-urlencoded"} conn.request("POST", "/connect/token", payload, headers) res = conn.getresponse() data = res.read() jsonData = json.loads(data.decode("utf-8")) result=jsonData["access_token"] print(result) ``` NodeJS ```js const axios = require('axios'); const response = await axios.post( 'https://account.boldsign.com/connect/token', new URLSearchParams({ 'grant_type': 'refresh_token', 'client_id': 'YOUR_CLIENT_ID', 'client_secret': 'YOUR_CLIENT_SECRET', 'refresh_token': 'YOUR_REFRESH_TOKEN' }) ); ``` {% /codetab %} **Example response** ```json { "id_token": "eyJhbGdfiJSUzI1N...", "access_token": "eyJhbGciOiJSUzI1N...", "expires_in": 3600, "token_type": "Bearer", "refresh_token": "D35CC2B09F...", "scope": "openid profile email BoldSign.Documents.All offline_access" } ``` ## Client credential flow {% post /%}{% path text="https://account.boldsign.com/connect/token" /%} The client credential flow obtains the access token as a specific user throughout the lifetime. This is different from acting on behalf of another user, like in the Authorization code flow. This flow is often used in cases where automation is involved without directly requiring user interaction. For example, an organization needs to send out onboarding documents for its employees on hiring. This process can be automated using the HR account's client credentials. The client credential flow does not include a refresh token, and a new access token has to be requested when the old one expires. ### Request parameters {% nestedtable %} - {% arguments name="grant_type" /%}{% batch datatype="string" /%}{% required /%} - The value should always be `client_credentials` while using this flow. --- - {% arguments name="client_id" /%}{% batch datatype="string" /%}{% required /%} - The client ID assigned to your OAuth2 application. The value must be URL encoded before being sent to the server. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="client_secret" /%}{% batch datatype="string" /%}{% required /%} - The client secret generated for your OAuth2 application. The value must be URL encoded before being sent to the server. The Basic Authorization pattern, which instead provides credentials in the Authorization header, is also supported. --- - {% arguments name="scope" /%}{% batch datatype="string" /%}{% required /%} - Specify the space-delimited string of scopes. The scopes `openid`, `profile`, and `email` should be specified to limit and grant specific permissions to your access token. Include `offline_access` to receive a Refresh Token. The scopes required to access the BoldSign API endpoints will be available {% customlink href="https://developers.boldsign.com/authentication/introduction/?region=us#scopes" text="here" /%}. If left empty, all scopes will be granted when the access token is issued. {% /nestedtable %} **Request syntax** {% codetab id="codetab3" %} cURL ```shell curl -X POST 'https://account.boldsign.com/connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \ --data-urlencode 'scope=BoldSign.Documents.All' ``` C# ```csharp using var httpClient = new HttpClient(); var parameters = new List> { new KeyValuePair("grant_type", "client_credentials"), new KeyValuePair("client_id", "YOUR_CLIENT_ID"), new KeyValuePair("client_secret", "YOUR_CLIENT_SECRET"), new KeyValuePair("scope", "BoldSign.Documents.All"), }; using var request = new HttpRequestMessage() { RequestUri = new Uri("https://account.boldsign.com/connect/token"), Content = new FormUrlEncodedContent(parameters), Method = HttpMethod.Post, }; using var response = await httpClient .SendAsync(request) .ConfigureAwait(false); var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); response.EnsureSuccessStatusCode(); var token = JsonConvert.DeserializeObject>(responseBody); var accessToken = token["access_token"]; ``` Python ```python import json import requests import http conn = http.client.HTTPSConnection("account.boldsign.com") payload = "grant_type=client_credentials" + \ "&client_id=YOUR_CLIENT_ID" + \ "&client_secret=YOUR_CLIENT_SECRET" + \ "&scope=BoldSign.Documents.All" headers = {'content-type': "application/x-www-form-urlencoded"} conn.request("POST", "/connect/token", payload, headers) res = conn.getresponse() data = res.read() jsonData = json.loads(data.decode("utf-8")) result=jsonData["access_token"] print(result) ``` NodeJS ```js const axios = require('axios'); const response = await axios.post( 'https://account.boldsign.com/connect/token', new URLSearchParams({ 'grant_type': 'client_credentials', 'client_id': 'YOUR_CLIENT_ID', 'client_secret': 'YOUR_CLIENT_SECRET', 'scope': 'BoldSign.Documents.All' }) ); ``` {% /codetab %} **Example response** ```json { "access_token": "eyJhbGciOi...", "expires_in": 3600, "token_type": "Bearer", "scope": "BoldSign.Documents.All" } ``` ## Implicit flow The implicit flow is best suited for client-side applications needing direct user interaction for quick resource access. It streamlines token acquisition by bypassing server for token exchange. Unlike client credentials and authorization code flows, the implicit flow operates without a client secret. This approach is particularly useful for single-page web apps and mobile applications. However, developers must exercise caution in token storage within browsers or mobile environments. When implementing this flow, it's crucial to follow security best practices to protect the access token to avoid common attacks like XSS. You can specify which origins (CORS) can access resources by adding them here when creating the OAuth2 application. ![Enable implicit flow and add origins](/static/images/authentication/enable-implicit-flow.png) {% nestedtable %} - {% arguments name="response_type" /%}{% batch datatype="string" /%}{% required /%} - The value should be always `token` while using this flow. --- - {% arguments name="client_id" /%}{% batch datatype="string" /%}{% required /%} - The client ID that is assigned to your OAuth2 application. --- - {% arguments name="scope" /%}{% batch datatype="string" /%}{% required /%} - Specify the space-delimited string of scopes. The scopes `openid`, `profile`, and `email` should be specified to limit and grant specific permissions to your access token. The scopes required to access the BoldSign API endpoints will be available {% customlink href="https://developers.boldsign.com/authentication/introduction/?region=us#scopes" text="here" /%}. --- - {% arguments name="redirect_uri" /%}{% batch datatype="string" /%}{% required /%} - The redirect uri that your client wants to redirect to. The URI should also been configured in your OAuth2 application in the BoldSign. --- - {% arguments name="state" /%}{% batch datatype="string" /%} - A random value of string will be provided back in the redirect URL response to keep track of the session or to prevent initiation from unsolicited flows. --- - {% arguments name="nonce" /%}{% batch datatype="string" /%}{% required /%} - A randomly generated string that can be used to associate a client session with an ID token and to mitigate replay attacks. The `nonce` value is returned in the ID token and must match the value provided in the request. {% /nestedtable %} **URI syntax** ```shell https://account.boldsign.com/connect/authorize ?response_type=id_token token &client_id=YOUR_CLIENT_ID &state=YOUR_REQUEST_STATE &scope=YOUR_SPACE_DELIMITED_SCOPES &redirect_uri=YOUR_REDIRECT_URI &nonce=YOUR_NONCE_VALUE ``` **URI example** ```shell https://account.boldsign.com/connect/authorize?response_type=id_token token&client_id=e36fdf2b-xxxx-xxxx-xxxx-f8510d2dfde4&state=YTc2MzVhM2ItNGYyYYTc2MzVhM2ItNGYyYYTc2MzVhM2ItNGYyY&scope=BoldSign.Documents.All BoldSign.Templates.All&redirect_uri=https://yourapp.com/callback&nonce=dGhpcy1pc19hX25vbmNlX3ZhbHVl ``` Your user will be prompted to sign in to their account and give consent for your app to make calls on their behalf. After selecting Allow, the website will be redirected to your configured redirect URI. An example is provided below. **Example response callback** ```shell https://yourapp.com/callback/#id_token=eyJhbGciO...&access_token=eyJhbGciOi... &token_type=Bearer &expires_in=3600 &scope=BoldSign.Documents.All%20BoldSign.Templates.All &state=YTc2MzVhM2ItNGYyYYTc2MzVhM2ItNGYyYYTc2MzVhM2ItNGYyY ``` ## Usage To make an HTTP request with OAuth2 access token, the request header must include the `Authorization.` Use the access token in the following format. {% codetab id="codetab4" %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/list' -H 'Authorization: Bearer eyJhbGci...' ``` C# ```csharp var configuration = new Configuration(); // set your OAuth2 Access Token for authentication. configuration.SetBearerToken("eyJhbGciOiJSUz..."); var apiClient = new ApiClient(configuration); var documentClient = new DocumentClient(apiClient); var documents = documentClient.ListDocuments(1, 10); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/list" payload={} headers = { 'Authorization': 'Bearer eyJhbGciOiJSUz...' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = await axios.get('https://api.boldsign.com/v1/document/list', { headers: { 'Authorization': 'Bearer eyJhbGciOiJSUz...' } }); ``` {% /codetab %} --- # File: branding\create-brand.md # Branding The branding feature is used to customize the appearance of the email sent to the recipients, such as the logo, background color, and button color. It also allows you to customize the document's signing page with your own logo and enable your own disclaimer. BoldSign allows you to create multiple brands in your account. When sending the signature request, you can select which particular brand should be applied with that signature request. ## Create brand {% post /%} {% path text="/v1/brand/create" /%} Create a new brand to your organization account. There is no limitation to create a number of brands. Also, after the successful brand creation, the API request will return the brand ID. You can use it to set the brand while creating the document. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/brand/create' \ -H 'X-API-KEY: {your API key}' \ -F 'BrandName=Syncfusion' \ -F 'BrandLogo=@D:\SyncfusionLogo.png' \ -F 'BackgroundColor=red' \ -F 'ButtonColor=green' \ -F 'ButtonTextColor=white' \ -F 'EmailDisplayName={SenderName} from Syncfusion' \ -F 'RedirectUrl=https://www.syncfusion.com/' \ -F 'IsDefault=true' \ -F 'CanHideTagLine=false' \ -F 'CombineAuditTrail=true' \ -F 'CombineAttachments=true' \ -F 'DocumentTimeZone=+05:30' \ -F 'EmailSignedDocument=1' \ -F 'HideDecline=false' \ -F 'HideSave=false'\ -F 'ShowBuiltInFormFields=true' \ -F 'AllowCustomFieldCreation=true' \ -F 'ShowSharedCustomFields=false' \ -F 'ExcludeAuditTrailFromEmail=false' \ -F 'CustomDomainSettings={"DomainName":"mail.cubeflakes.com","FromName":"notification"}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); var brandSettings = new BrandSettings() { BrandName = "Syncfusion", BrandLogo = new ImageFileBytes() { ContentType = "image/png", FileBytes = File.ReadAllBytes("YOUR_FILE_PATH"), }, ShowBuiltInFormFields = true }; BrandingData brandCreated = brandingClient.CreateBrand(brandSettings); string brandId = brandCreated.BrandId; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) brand_created = branding_api.create_brand( brand_name="Syncfusion", brand_logo="YOUR_FILE_PATH") ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $brand_name = 'Syncfusion'; $brand_logo = 'YOUR_FILE_PATH'; $brand_created = $branding_api->createBrand($brand_name, $brand_logo); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); String brandName ="Syncfusion"; File brandLogo = new File("YOUR_FILE_PATH"); BrandCreated brandCreated = brandingApi.createBrand(brandName, brandLogo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { BrandingApi } from "boldsign"; import * as fs from 'fs'; const createBrandApi = new BrandingApi(); createBrandApi.setApiKey("YOUR_API_KEY"); const brandName = "NodeSDK"; const brandLogo = fs.createReadStream("YOUR_FILE_PATH"); const brandCreated = createBrandApi.createBrand(brandName, brandLogo); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="BrandName" /%}{% batch datatype="string" /%}{% required /%} - Define the brand name that is used to set the brand while creating the signature request in the BoldSign application. --- - {% arguments name="BrandLogo" /%}{% batch datatype="object" /%}{% required /%} - It is used to customize the default logo available in the emails and document signing pages. You can update or set the logo using an `ImageFile` object. Choose the appropriate implementation (ImageFileBytes, ImageFilePath, or ImageFileStream) based on your scenario. Supported file formats include JPEG (.jpg, .jpeg), PNG (.png), and SVG (.svg). The maximum file size allowed is 512KB. --- - {% arguments name="BackgroundColor" /%}{% batch datatype="string" /%} - It is used to customize the background appearance of the emails sent to the signers. --- - {% arguments name="ButtonColor" /%}{% batch datatype="string" /%} - It is used to customize the button background appearance in emails. --- - {% arguments name="ButtonTextColor" /%}{% batch datatype="string" /%} - It is used to customize the button text color in the email. --- - {% arguments name="EmailDisplayName" /%}{% batch datatype="string" /%} - It will be used as the From name of emails sent to the signers. You can also define this with placeholder text like {SenderName} from BoldSign. Here, {SenderName} will be replaced with the actual sender name who is making the signature request. --- - {% arguments name="DisclaimerTitle" /%}{% batch datatype="string" /%} - You can set your own legal terms to which signers should agree before signing the document. This property is used to set the title of your legal terms.When a Disclaimer Title is provided, a corresponding Disclaimer Description is mandatory. --- - {% arguments name="DisclaimerDescription" /%}{% batch datatype="string" /%} - It is used to set the description of your legal terms. --- - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - Once the signers/reviewers have completed the signing process of the document, it will be redirected to the specified URL. --- - {% arguments name="IsDefault" /%}{% batch datatype="boolean" /%} - It is used to set the default brand. --- - {% arguments name="CanHideTagLine" /%}{% batch datatype="boolean" /%} - It is used to show/hide the "Powered By BoldSign" option available in the emails sent to the signers. Free plan users can't disable this feature. --- - {% arguments name="CombineAuditTrail" /%}{% batch datatype="boolean" /%} - It is used to combine both signed and audit trial documents as a single document in the completion email. --- - {% arguments name="CombineAttachments" /%}{% batch datatype="boolean" /%} - It is used to combine attachments with the signed document. --- - {% arguments name="EmailSignedDocument" /%}{% batch datatype="string" /%} - It is used to enable/disable the attachments in the final completion email. The allowed values are, 1. `Attachment` - This option allows you to attach the signed and audit trail documents to the completion email and also includes a link to download them. 2. `DocumentLink` - Displays only the link in the email to download the signed and audit trail documents. If the property is not set, the Attachment will be taken as a default value. --- - {% arguments name="DocumentTimeZone" /%}{% batch datatype="string" /%} - It is used to convert the dates in the audit trail document and date signed field to the specified timezone. --- - {% arguments name="HideDecline" /%}{% batch datatype="boolean" /%} - This option prevents signers to decline the document during the signing process. --- - {% arguments name="HideSave" /%}{% batch datatype="boolean" /%} - This option prevents signers to save their changes during the signing process and continue signing later. --- - {% arguments name="ShowBuiltInFormFields" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to view the standard form fields. --- - {% arguments name="AllowCustomFieldCreation" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to create custom form fields. --- - {% arguments name="ShowSharedCustomFields" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to view the shared custom form fields. --- - {% arguments name="ExcludeAuditTrailFromEmail" /%}{% batch datatype="boolean" /%} - It is used to exclude the audit trail document from the completion email. --- - {% arguments name="CustomDomainSettings" /%}{% batch datatype="object" /%} - The `CustomDomainSettings` property enables the option to customize your email domain, allowing you to personalize the sender’s name and subdomain, thereby improving brand identity and professionalism in outgoing emails. {% nestedtable %} - {% arguments name="DomainName" /%}{% batch datatype="string" /%} - This is used to set the domain name of the custom domain. The domain name should be specified in subdomain format. For example, "mail.boldsign.com" or "sign.boldsign.com.". --- - {% arguments name="FromName" /%}{% batch datatype="string" /%} - This is used to set the display name or sender’s name for the custom domain. --- {% /nestedtable %} --- - {% arguments name="DocumentExpirySettings" /%}{% batch datatype="object" /%} - The `DocumentExpirySettings` property is used to set the default expiry date and reminder settings of the document. {% nestedtable %} - {% arguments name="ExpiryDateType" /%}{% batch datatype="ExpiryDateType" /%} - This is used to set the default expiry date type for the document. The allowed values are "Days," "Hours," and "SpecificDateTime." --- - {% arguments name="ExpiryValue" /%}{% batch datatype="integer" /%} - This is used to set the default expiry value in days or hours for the document, based on the ExpiryDateType. If ExpiryDate is set to "SpecificDateTime," this property is not applicable. --- - {% arguments name="EnableDefaultExpiryAlert" /%}{% batch datatype="boolean" /%} - This enables or disables a reminder that will be sent one day before the document expires. --- - {% arguments name="EnableAutoReminder" /%}{% batch datatype="boolean" /%} - This enables or disables the automatic reminders for the document. --- - {% arguments name="ReminderDays" /%}{% batch datatype="integer" /%} - This is used to set the number of days between each automatic reminder sent for the document. --- - {% arguments name="ReminderCount" /%}{% batch datatype="integer" /%} - This is used to set how many times the auto-reminder should be sent for the document. --- {% /nestedtable %} --- - {% arguments name="SignatureFrameSettings" /%}{% batch datatype="object" /%} - `SignatureFrameSettings` provides configuration options that control whether recipient details are shown within the signature frame. **Note:** The properties ShowRecipientName, ShowRecipientEmail, and ShowTimeStamp are applied only when EnableSignatureFrame is set to true. If EnableSignatureFrame is set to false, these properties are ignored and no information is displayed in the signature frame. {% nestedtable %} - {% arguments name="EnableSignatureFrame" /%}{% batch datatype="boolean" /%} - Enabling this option allows the signature frame to display recipient details. --- - {% arguments name="ShowRecipientName" /%}{% batch datatype="boolean" /%} - Enabling this option displays the recipient’s name in the signature frame. --- - {% arguments name="ShowRecipientEmail" /%}{% batch datatype="boolean" /%} - Enabling this option displays the recipient’s email address in the signature frame. --- - {% arguments name="ShowTimeStamp" /%}{% batch datatype="boolean" /%} - Enabling this option displays the timestamp in the signature frame. --- {% /nestedtable %} --- - {% arguments name="HideReassign" /%}{% batch datatype="boolean" /%} - Enabling this option disables reassignment for all new documents. This setting cannot be changed during document creation. The default value is false. {% /nestedtable %} ## Example response ***200 Success*** ```json { "brandId": "e33502d4-xxxx-xxxx-xxxx-6v3n85d51948" } ``` **_NOTE:_** When you creating the brand with custom domain settings, please create a ticket to {% customlink href="mailto:support@boldsign.com" text="support@boldsign.com" /%} to verify the domain name. Include the domain details and Brand ID in your ticket. Once we receive this information, we will provide the DKIM-DNS records and custom mail DNS records for your domain. You'll need to add these records to your DNS settings and inform us once this is done. We will then activate the domain on our end, allowing emails to be sent from your specified domain. Please note, there is an additional charge of $5 for each extra custom domain. --- # File: branding\delete-brand.md # Delete brand {% delete /%} {% path text="/v1/brand/delete" /%} This API is used to delete the brand. You can delete the existing brand, and the deleted brand cannot be retrieved. ## Code snippet {% codetab %} cURL ```shell curl -X DELETE 'https://api.boldsign.com/v1/brand/delete?brandId={brandid}' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); brandingClient.DeleteBrand("YOUR_BRAND_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) branding_api.delete_brand(brand_id="YOUR_BRAND_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $branding_api->deleteBrand($brand_id = 'YOUR_BRAND_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); brandingApi.deleteBrand("YOUR_BRAND_ID"); ``` NodeJS ```js import { BrandingApi } from "boldsign"; const brandingApi = new BrandingApi(); brandingApi.setApiKey("YOUR_API_KEY"); brandingApi.deleteBrand("YOUR_BRAND_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="brandId" /%}{% batch datatype="string" /%}{% required /%} - The brand Id obtained after successful brand creation needs to be passed to delete the brand. {% /nestedtable %} ## Example response ***200 Success*** ```json { "message": "The brand has been deleted successfully" } ``` --- # File: branding\get-brand.md # Get brand {% get /%} {% path text="/v1/brand/get" /%} This API is used to fetch the specific brand in your account. The brand contains information such as brandId, brandName, brandLogo, etc. ## Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/brand/get?brandId={brandid}' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); ViewBrandDetails brandDetails = brandingClient.GetBrandDetails("YOUR_BRAND_ID"); var getBrand = brandDetails.BrandName; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) brand_details = branding_api.get_brand(brand_id="YOUR_BRAND_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $brand_details = $branding_api->getBrand($brand_id = 'YOUR_BRAND_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); ViewBrandDetails brandDetails = brandingApi.getBrand("YOUR_BRAND_ID"); ``` NodeJS ```js import { BrandingApi } from "boldsign"; const brandingApi = new BrandingApi(); brandingApi.setApiKey("YOUR_API_KEY"); const brandDetails = brandingApi.getBrand("YOUR_BRAND_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="brandId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the brand, from which the details should be fetched. {% /nestedtable %} ## Example response ***200 Success*** ```json { "brandId": "41b7483d-95de-4bd2-8c29-d56ba84c8e69", "brandLogo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABKYAAAfQCAIAAAB378DwAAAMNmlDQ1BEaXNwbGF5AABIiaVXd1hT2RI/ ...... ...... +CYpgliBiX0ifrh7dbvEGCfbIXacAAAAASUVORK5CYII=", "brandName": "Syncfusion", "backgroundColor": "Red", "buttonColor": "Green", "buttonTextColor": "White", "emailDisplayName": "{SenderName} from Syncfusion", "disclaimerTitle": "", "disclaimerDescription": "", "redirectUrl": "http://syncfusion.com/", "isDefault": true, "canHideTagLine": false, "combineAuditTrail": true, "combineAttachments": true, "emailSignedDocument": "Attachment", "documentTimeZone": "+05:30", "showBuiltInFormFields": true, "allowCustomFieldCreation": false, "showSharedCustomFields": false, "hideDecline": false, "hideSave": false, "excludeAuditTrailFromEmail": false, "DocumentExpirySettings": { "expiryDateType": "Days", "expiryValue": 60, "enableDefaultExpiryAlert": false, "enableAutoReminder": false, "reminderDays": 3, "reminderCount": 5 }, "customDomainSettings": { "domainName": "mail.cubeflakes.com", "fromName": "notification" }, "isDomainVerified": false } ``` --- # File: branding\list-brands.md # List all brands {% get /%} {% path text="/v1/brand/list" /%} This API is used to fetch the list of available brands in your organization (account). The list contains all the information of brands such as brandId, brandName, brandLogo, etc. ## Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/brand/list' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); BrandingRecords brandingRecords = brandingClient.ListBrand(); var brandList = brandingRecords.Result; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) branding_records = branding_api.brand_list() ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $branding_records = $branding_api->brandList(); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); BrandingRecords brandingRecords = brandingApi.brandList(); ``` NodeJS ```js import { BrandingApi } from "boldsign"; const brandingApi = new BrandingApi(); brandingApi.setApiKey("YOUR_API_KEY"); const brandingRecords = brandingApi.brandList(); ``` {% /codetab %} ## Example response ***200 Success*** ```json { "result": [ { "brandId": "41b7483d-95de-4bd2-8c29-d56ba84c8e69", "brandLogo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABKYAAAfQCAIAAAB378DwAAAMNmlDQ1BEaXNwbGF5AABIiaVXd1hT2RI/ ...... ...... +CYpgliBiX0ifrh7dbvEGCfbIXacAAAAASUVORK5CYII=", "brandName": "Syncfusion", "backgroundColor": "Red", "buttonColor": "Green", "buttonTextColor": "White", "emailDisplayName": "{SenderName} from Syncfusion", "disclaimerTitle": "", "disclaimerDescription": "", "redirectUrl": "http://syncfusion.com/", "isDefault": true, "canHideTagLine": false, "combineAuditTrail": true, "combineAttachments": true, "emailSignedDocument": "Attachment", "documentTimeZone": "+05:30", "showBuiltInFormFields": true, "allowCustomFieldCreation": false, "showSharedCustomFields": false, "hideDecline": false, "hideSave":false, "excludeAuditTrailFromEmail": false, "DocumentExpirySettings": { "expiryDateType": "Days", "expiryValue": 60, "enableDefaultExpiryAlert": false, "enableAutoReminder": false, "reminderDays": 3, "reminderCount": 5 }, "customDomainSettings": { "domainName": "mail.cubeflakes.com", "fromName": "notification" }, "isDomainVerified": false } ] } ``` --- # File: branding\reset-brand-settings-to-default.md # Reset the default brand {% post /%} {% path text="/v1/brand/resetdefault/" /%} This API is used to reset the default brand. You can set any brand as default from the list of available brands. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/brand/resetdefault?brandId={brandId}' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); brandingClient.ResetDefaultBrand("YOUR_BRAND_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) branding_api.reset_default_brand(brand_id="YOUR_BRAND_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $branding_api->resetDefaultBrand($brand_id = 'YOUR_BRAND_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); brandingApi.resetDefaultBrand("YOUR_BRAND_ID"); ``` NodeJS ```js import { BrandingApi } from "boldsign"; const brandingApi = new BrandingApi(); brandingApi.setApiKey("YOUR_API_KEY"); brandingApi.resetDefaultBrand("YOUR_BRAND_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="brandId" /%}{% batch datatype="string" /%}{% required /%} - The brand Id obtained after successful brand creation needs to be passed to set the default brand. {% /nestedtable %} ## Example response ***200 Success*** ```json { "message": "The default brand has been updated successfully" } ``` --- # File: branding\update-brand.md # Update a brand {% post /%} {% path text="/v1/brand/edit/" /%} This API is used to edit the brand. Brand details like brand name, brand logo, background color, etc., can be edited in the existing brand. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/brand/edit?brandId={brandId}' \ -H 'X-API-KEY: {your API key}' \ -F 'BrandName=BoldDesk' \ -F 'BrandLogo=@D:/BoldDeskLogo.png' \ -F 'BackgroundColor=red' \ -F 'ButtonColor=green' \ -F 'ButtonTextColor=white' \ -F 'EmailDisplayName={SenderName} from BoldDesk' \ -F 'RedirectUrl=https://www.bolddesk.com/' \ -F 'IsDefault=true' \ -F 'CanHideTagLine=false' \ -F 'CombineAuditTrail=true' \ -F 'CombineAttachments=true' \ -F 'DocumentTimeZone=+05:30' \ -F 'EmailSignedDocument=1' \ -F 'HideDecline=false' \ -F 'HideSave=false'\ -F 'ShowBuiltInFormFields=true' \ -F 'AllowCustomFieldCreation=true' \ -F 'ShowSharedCustomFields=true' \ -F 'ExcludeAuditTrailFromEmail=false' \ -F 'CustomDomainSettings={"DomainName":"mail.cubeflakes.com","FromName":"notification"}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var brandingClient = new BrandingClient(apiClient); var brandSettings = new BrandSettings() { BrandName = "BoldSign", ShowBuiltInFormFields = true }; BrandingData brandUpdated = brandingClient.EditBrand("YOUR_BRAND_ID", brandSettings); string brandId = brandUpdated.BrandId; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: branding_api = boldsign.BrandingApi(api_client) brand_updated = branding_api.edit_brand( brand_id="YOUR_BRAND_ID", brand_name="BoldSign") ``` PHP ```php setApiKey('YOUR_API_KEY'); $branding_api = new BrandingApi($config); $brand_id = 'YOUR_BRAND_ID'; $brand_name = 'BoldSign'; $brand_updated = $branding_api->editBrand($brand_id, $brand_name); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); BrandingApi brandingApi = new BrandingApi(client); String brandName ="BoldSign"; String brandId = "YOUR_BRAND_ID"; BrandCreated brandUpdated = brandingApi.editBrand(brandId, brandName, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { BrandingApi } from "boldsign"; const brandingApi = new BrandingApi(); brandingApi.setApiKey("YOUR_API_KEY"); const brandId = "YOUR_BRAND_ID"; const brandName = "Node-SDK-Test"; const brandUpdated = brandingApi.editBrand(brandId, brandName); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="brandId" /%}{% batch datatype="string" /%}{% required /%} - The brand Id obtained after successful brand creation needs to be passed while editing the brand. {% /nestedtable %} ## Request body {% nestedtable %} --- - {% arguments name="BrandName" /%}{% batch datatype="string" /%} - Define the brand name that is used to set the brand while creating the signature request in the BoldSign application. --- - {% arguments name="BrandLogo" /%}{% batch datatype="object" /%} - It is used to customize the default logo available in the emails and document signing pages. You can update or set the logo using an `ImageFile` object. Choose the appropriate implementation (ImageFileBytes, ImageFilePath, or ImageFileStream) based on your scenario. Supported file formats include JPEG (.jpg, .jpeg), PNG (.png), and SVG (.svg). The maximum file size allowed is 512KB. --- - {% arguments name="BackgroundColor" /%}{% batch datatype="string" /%} - It is used to customize background appearance of the emails sent to the signers. --- - {% arguments name="ButtonColor" /%}{% batch datatype="string" /%} - It is used to customize the button background appearance in emails. --- - {% arguments name="ButtonTextColor" /%}{% batch datatype="string" /%} - It is used to customize the button text color in the email. --- - {% arguments name="EmailDisplayName" /%}{% batch datatype="string" /%} - It will be used as the From name of emails sent to the signers. You can also define this with placeholder text like {SenderName} from BoldSign. Here, {SenderName} will be replaced with the actual sender name who is making the signature request. --- - {% arguments name="DisclaimerTitle" /%}{% batch datatype="string" /%} - You can set your own legal terms to which signers should agree before signing the document. This property is used to set the title of your legal terms. --- - {% arguments name="DisclaimerDescription" /%}{% batch datatype="string" /%} - It is used to set the description of your legal terms. --- - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - Once the signers/reviewers have completed the signing process of the document, it will be redirected to the specified URL. --- - {% arguments name="IsDefault" /%}{% batch datatype="boolean" /%} - It is used to set the default brand. --- - {% arguments name="CanHideTagLine" /%}{% batch datatype="boolean" /%} - It is used to show/hide the "Powered By BoldSign" option available in the emails sent to the signers. Free plan users can't disable this feature. --- - {% arguments name="CombineAuditTrail" /%}{% batch datatype="boolean" /%} - It is used to combine both signed and audit trial documents as a single document in the completion email. --- - {% arguments name="CombineAttachments" /%}{% batch datatype="boolean" /%} - It is used to combine attachments with the signed document. --- - {% arguments name="EmailSignedDocument" /%}{% batch datatype="string" /%} - It is used to enable/disable the attachments in the final completion email. The allowed values are, 1. `Attachment` - This option allows you to attach the signed and audit trail documents in the completion email and also includes a link to download them. 2. `DocumentLink` - Displays only the link in the email to download the signed and audit trail documents. If the property is not set, the `Attachment` will be taken as the default value. --- - {% arguments name="DocumentTimeZone" /%}{% batch datatype="string" /%} - It is used to convert the dates in the audit trail document and date signed field to the specified timezone. --- - {% arguments name="HideDecline" /%}{% batch datatype="boolean" /%} - This option prevents signers to decline the document during the signing process. --- - {% arguments name="HideSave" /%}{% batch datatype="boolean" /%} - This option prevents signers to save their changes during the signing process and continue signing later. --- - {% arguments name="ShowBuiltInFormFields" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to view the standard form fields. --- - {% arguments name="AllowCustomFieldCreation" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to create custom form fields. --- - {% arguments name="ShowSharedCustomFields" /%}{% batch datatype="boolean" /%} - Enabling this option allows users in the organization to view the shared custom form fields. --- - {% arguments name="ExcludeAuditTrailFromEmail" /%}{% batch datatype="boolean" /%} - It is used to exclude the audit trail document from the completion email. --- - {% arguments name="CustomDomainSettings" /%}{% batch datatype="object" /%} - The `CustomDomainSettings` property enables the option to customize your email domain, allowing you to personalize the sender’s name and subdomain, thereby improving brand identity and professionalism in outgoing emails. {% nestedtable %} - {% arguments name="DomainName" /%}{% batch datatype="string" /%} - This is used to set the domain name of the custom domain. The domain name should be specified in subdomain format. For example, "mail.boldsign.com" or "sign.boldsign.com.". --- - {% arguments name="FromName" /%}{% batch datatype="string" /%} - This is used to set the display name or sender’s name for the custom domain. --- {% /nestedtable %} --- - {% arguments name="DocumentExpirySettings" /%}{% batch datatype="object" /%} - The `DocumentExpirySettings` property is used to set the default expiry date and reminder settings of the document. {% nestedtable %} - {% arguments name="ExpiryDateType" /%}{% batch datatype="ExpiryDateType" /%} - This is used to set the default expiry date type for the document. The allowed values are "Days," "Hours," and "SpecificDateTime." --- - {% arguments name="ExpiryValue" /%}{% batch datatype="integer" /%} - This is used to set the default expiry value in days or hours for the document, based on the ExpiryDateType. If ExpiryDate is set to "SpecificDateTime," this property is not applicable. --- - {% arguments name="EnableDefaultExpiryAlert" /%}{% batch datatype="boolean" /%} - This enables or disables a reminder that will be sent one day before the document expires. --- - {% arguments name="EnableAutoReminder" /%}{% batch datatype="boolean" /%} - This enables or disables the automatic reminders for the document. --- - {% arguments name="ReminderDays" /%}{% batch datatype="integer" /%} - This is used to set the number of days between each automatic reminder sent for the document. --- - {% arguments name="ReminderCount" /%}{% batch datatype="integer" /%} - This is used to set how many times the auto-reminder should be sent for the document. --- {% /nestedtable %} --- - {% arguments name="SignatureFrameSettings" /%}{% batch datatype="object" /%} - `SignatureFrameSettings` provides configuration options that control whether recipient details are shown within the signature frame. **Note:** The properties ShowRecipientName, ShowRecipientEmail, and ShowTimeStamp are applied only when EnableSignatureFrame is set to true. If EnableSignatureFrame is set to false, these properties are ignored and no information is displayed in the signature frame. {% nestedtable %} - {% arguments name="EnableSignatureFrame" /%}{% batch datatype="boolean" /%} - Enabling this option allows the signature frame to display recipient details. --- - {% arguments name="ShowRecipientName" /%}{% batch datatype="boolean" /%} - Enabling this option displays the recipient’s name in the signature frame. --- - {% arguments name="ShowRecipientEmail" /%}{% batch datatype="boolean" /%} - Enabling this option displays the recipient’s email address in the signature frame. --- - {% arguments name="ShowTimeStamp" /%}{% batch datatype="boolean" /%} - Enabling this option displays the timestamp in the signature frame. --- {% /nestedtable %} --- - {% arguments name="HideReassign" /%}{% batch datatype="boolean" /%} - Enabling this option disables reassignment for all new documents. This setting cannot be changed during document creation. The default value is false. {% /nestedtable %} ## Example response ***200 Success*** ```json { "brandId": "e33502d4-xxxx-xxxx-xxxx-6v3n85d51948" } ``` --- # File: coding-assistant\mcp-server.md # MCP Server ## Prerequisites 1. **An MCP-compatible client:** VS Code (with GitHub Copilot), Cursor, Windsurf, Claude Desktop, Cline, or any client that supports MCP over HTTP. No BoldSign API key is required, as the MCP server only accesses publicly available BoldSign documentation. ## MCP Server Endpoint The BoldSign Assistant MCP server is available at: ``` https://developers-mcp.boldsign.com/mcp ``` This is a **Streamable HTTP MCP server**. It uses the Streamable HTTP transport and does not support `stdio` or `SSE` transports. ## Quick Start 1. Copy the BoldSign Assistant MCP server URL: `https://developers-mcp.boldsign.com/mcp` 2. Add it to your MCP client configuration (see client-specific instructions below). 3. Restart or reload your client. 4. Open a new chat and ask: *"How do I send a document for signature using the BoldSign API?"* ## Client Installation ### Install in VS Code **Option 1 - Command Palette (recommended):** 1. Open the Command Palette (`Ctrl+Shift+P`) 2. Run **MCP: Add Server** 3. Select **HTTP** as the transport type 4. Enter `https://developers-mcp.boldsign.com/mcp` as the URL 5. Give it a name (e.g., `BoldSign`) and save **Option 2 - Manual config (`~/.vscode/mcp.json` or `.vscode/mcp.json`):** ```json { "servers": { "BoldSign": { "type": "http", "url": "https://developers-mcp.boldsign.com/mcp" } } } ``` Refer to the [VS Code MCP documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers) for more details. ### Install in Claude Web Claude Web connects to the BoldSign Assistant MCP server as a remote connector: 1. Open [Claude Web](https://claude.ai) and go to **Customize → Connectors** in the sidebar 2. Click **+** to add a custom connector 3. Enter a name (e.g., `BoldSign`) and the server URL: `https://developers-mcp.boldsign.com/mcp` 4. Click **Add**, then **Connect** 5. Enable the connector in the conversation where you want to use it {% note %} Remote connector availability depends on your Claude plan.{% /note %} ### Install in Claude Code Create or update a `.mcp.json` file in your project root: ```json { "mcpServers": { "BoldSign": { "type": "http", "url": "https://developers-mcp.boldsign.com/mcp" } } } ``` After saving, start Claude Code in that project and run `/mcp` to confirm the `boldsign` server is connected and its tools are available. ### Install in Cline **Option 1 - Remote Servers UI:** 1. In the Cline panel, click the **MCP Servers** icon 2. Open the **Remote Servers** tab 3. Enter server name `BoldSign`, paste `https://developers-mcp.boldsign.com/mcp`, select **Streamable HTTP**, and click **Add Server** **Option 2 - Manual config (`cline_mcp_settings.json`):** ```json { "mcpServers": { "BoldSign": { "url": "https://developers-mcp.boldsign.com/mcp", "type": "streamableHttp" } } } ``` Refer to the [Cline MCP documentation](https://docs.cline.bot/mcp/mcp-overview) for more details. ## Usage Once connected, you can ask the BoldSign Assistant MCP server questions directly in your AI client. Trigger phrases for best results: - `BoldSignAssistant` - `/boldsign-assistant` - `/boldsign` - `@boldsign` - `@ask_boldsign` - In VS Code: `#BoldSignAssistant` Grant the server permission to run when prompted (per session, workspace, or always). Start a new chat for each new topic to keep context focused. ## Mode Availability The BoldSign Assistant MCP server works across all supported AI interaction modes - **Ask/Chat, Edit, and Agent** - in compatible MCP clients. ## Example Prompts ### API & Integration - *"#BoldSignAssistant How do I send a document for signature using the BoldSign API?"* - *"@boldsign What are the required parameters for creating a template?"* - *"/boldsign How do I set up a webhook to track when a document is signed?"* - *"BoldSignAssistant Show me how to embed a signing experience in my web app."* ### Scaffolding Applications Use a single prompt to generate a complete, working application wired up with BoldSign: - **ASP.NET Core:** *"Create an ASP.NET Core MVC app with a button to send a document for signing using the BoldSign .NET SDK."* - **Node.js:** *"Build a Node.js Express app that sends a BoldSign document for signature when a form is submitted."* - **Python:** *"Create a Python Flask app that uses the BoldSign SDK to send a document and track its status."* - **Java:** *"Generate a Java Spring Boot application with a BoldSign integration to send and manage signature requests."* ## Troubleshooting | Issue | Resolution | |---|---| | Server not connecting | Verify the URL is exactly `https://developers-mcp.boldsign.com/mcp` | | Client not supported | Ensure your MCP client supports HTTP transport (not only stdio/SSE) | | No response from assistant | Check that the MCP server is enabled in your client tools/server settings | | Unexpected answers | Start a new chat session - stale context can affect response quality | --- # File: coding-assistant\overview.md # Overview The **BoldSign AI Coding Assistant** helps you integrate BoldSign APIs and SDKs faster. Powered by the {% customlink href="/coding-assistant/mcp-server/" text="BoldSign Assistant MCP" /%} server, a queryable layer over the BoldSign developer documentation. It gives your AI assistant real-time access to accurate API references, code guidance, and integration patterns without leaving your development environment. {% note %} **Note:** The BoldSign Assistant MCP server does **not** perform any eSignature actions such as sending documents, initiating signing workflows, or making live API calls.{% /note %} ## MCP Server Endpoint The BoldSign Assistant MCP server is available as a **streamable HTTP MCP server** at: ``` https://developers-mcp.boldsign.com/mcp ``` No API key or additional dependencies are required to connect. Simply add this URL to your MCP-compatible client and start asking questions. ### Key Capabilities - Search and retrieve content from BoldSign developer documentation - Answer questions about BoldSign API endpoints, parameters, and workflows - Provide code guidance for sending documents, managing templates, setting up webhooks, and more - Help troubleshoot integration issues with documentation-backed context - Scaffold complete, working applications from a single prompt across supported SDKs and frameworks. For example: *"Create a ASP.NET Core MVC application with an option to send the document for signing using BoldSign API"* ## Getting Started 1. **Connect:** Add `https://developers-mcp.boldsign.com/mcp` to your MCP-compatible client (VS Code, Cursor, Claude Desktop, Windsurf, or Cline). 2. **Query:** Ask the assistant about BoldSign APIs, SDKs, webhooks, templates, embedded signing, and more. 3. **Build:** Apply the code snippets and guidance to integrate BoldSign into your project. For detailed setup instructions for each client, see the {% customlink href="/coding-assistant/mcp-server/" text="MCP Server" /%} page. ## Best Practices - **Validate generated code:** Review and test AI-generated snippets before deploying to production. - **Use sandbox accounts:** Test integrations with a [BoldSign sandbox account](https://boldsign.com/electronic-signature-pricing/?plan=api) before going live. - **Start fresh for new topics:** Open a new chat when switching workflows to keep context focused. - **Use advanced models:** For best results, use GPT-4o, GPT-5, or Claude Sonnet 4.5+. ## Privacy & Data Handling - The MCP server only reads publicly published BoldSign documentation - it does not access your files, workspace, or account data. - Prompts are not stored, reused, or used to train BoldSign models. - Documentation context is retrieved by the MCP server; all output is generated by your selected AI model. --- # File: contactGroups\create-contactGroups.md # ContactGroups The contact Group's APIs are primarily used to interact with the BoldSign application to create, update, delete and get contact group details. This section demonstrates how to to create contact, update contact group details, delete contact group details, get contact group details and get contact list from your Organizations. ## Create contactGroup {% post /%} {% path text="/v1/contactGroups/create" /%} This API is used to create a contact group using unique email addresses. You can then use this contact group when creating a document with the signer type set to ‘Group’ in the BoldSign application. ### Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/contactGroups/create' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "GroupName": "Grouptest1", "Contacts": [ { "Name": "Luther Cooper", "Email": "luthercooper@gmail.com" }, { "Name": "Hank White", "Email": "hankwhite@gmail.com" } ], "Directories": ["Sales", "Legal"] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var groupContactClient = new GroupContactClient(apiClient); var groupContact = new GroupContactDetails () { GroupName = "Testsdk", Contacts = new List { new Contacts { Name = "LutherCooper", Email = "luthercooper@cubeflakes.com" }, new Contacts { Name = "Hankwhite", Email = "hankwhite@cubeflakes.com" } }, Directories = new List { "Sales", "Legal" } }; var createGroupContactResponse = await groupContactClient.CreateGroupContactAsync(groupContact).ConfigureAwait(false); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: group_contacts_api = boldsign.GroupContactsApi(api_client) contact = boldsign.GroupUser( name="LutherCooper", email="luthercooper@cubeflakes.com" ) group_contact = boldsign.GroupContactDetails( groupName="Test_Group", contacts=[contact], directories=["directory1"] ) group_contacts_api.create_group_contact( group_contact_details=group_contact ) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\GroupContactsApi($config); $contact = new BoldSign\Model\GroupUser(); $contact->setName("John Doe"); $contact->setEmail("john.doe@cubeflakes.com"); $group_contact = new BoldSign\Model\GroupContactDetails(); $group_contact->setGroupName("Test_Group1"); $group_contact->setDirectories(["Test_Directory1"]); $group_contact->setContacts([$contact]); $result = $apiInstance->createGroupContact($group_contact); ``` NodeJS ```js import { GroupContactsApi, GroupContactDetails, GroupUser } from 'boldsign'; const contactGroupApi = new GroupContactsApi(); contactGroupApi.setApiKey("YOUR_API_KEY"); var groupUser1 = new GroupUser(); groupUser1.email = "luthercooper@cubeflakes.com"; groupUser1.name = "LutherCooper"; var groupContactDetails = new GroupContactDetails(); groupContactDetails.contacts = [groupUser1]; groupContactDetails.groupName = "Group1"; groupContactDetails.directories = ["dictionary_id"]; contactGroupApi.createGroupContact(groupContactDetails); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); GroupContactsApi groupContactApi = new GroupContactsApi(apiClient); GroupUser groupUser1 = new GroupUser(); groupUser1.setName("LutherCooper"); groupUser1.setEmail("luthercooper@cubeflakes.com"); GroupContactDetails groupContactDetails = new GroupContactDetails(); groupContactDetails.setGroupName("Group A"); groupContactDetails.setContacts(Arrays.asList(groupUser1)); groupContactDetails.setDirectories(Arrays.asList("dict")); CreateGroupContactResponse response = groupContactApi.createGroupContact(groupContactDetails); ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="GroupName" /%}{% batch datatype="string" /%}{% required /%} - The group name of the user. --- - {% arguments name="Contacts" /%}{% batch datatype="list" /%}{% required /%} - The list of the contacts {% nestedtable %} - {% arguments name="name" /%}{% batch datatype="string" /%}{% required /%} - The name of the user --- - {% arguments name="email" /%}{% batch datatype="string" /%}{% required /%} - the email of the user. {% /nestedtable %} --- - {% arguments name="Directories" /%}{% batch datatype="list" /%} - The list of directories to associate with the contact group. --- {% /nestedtable %} ### Example response **_200 Success_** ```json { "createdContacts": { "groupId": "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN", "groupName": "Grouptest1" } } ``` --- # File: contactGroups\delete-contactGroups.md # Delete ContactGroup {% delete /%} {% path text="/v1/contactGroups/delete" /%} This API allows you to delete a contact group based on the contact group ID you provide. ## Code snippet {% codetab %} cURL ```shell curl -X 'DELETE' \ 'https://api.boldsign.com/v1/contactGroups/delete?groupId=1b18b34d-aaae-4df8-aa8f-a93cda34379ac_pgVgo' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "API-KEY"); var groupContactClient = new GroupContactClient(apiClient); groupContactClient.DeleteGroupContactAsync("1b18b34d-aaae-4df8-aa8f-a93cda34379ac_pgVgo"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: group_contacts_api = boldsign.GroupContactsApi(api_client) group_contact = group_contacts_api.delete_group_contact( group_id="YOUR_GROUP_ID" ) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\GroupContactsApi($config); $apiInstance->deleteGroupContact("YOUR_GROUP_ID"); ``` NodeJS ```js import { GroupContactsApi } from "boldsign"; const contactGroupApi = new GroupContactsApi(); contactGroupApi.setApiKey("YOUR_API_KEY"); contactGroupApi.deleteGroupContact("YOUR_GROUP_ID"); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); GroupContactsApi groupContactApi = new GroupContactsApi(apiClient); groupContactApi.deleteGroupContact("YOUR_GROUP_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="string" /%}{% required /%} - The ID of the contactgroup to delete. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: contactGroups\get-contactGroup-details.md # Get ContactGroup {% get /%} {% path text="/v1/contactGroups/get" /%} This API allows you to get group contact details based on the contact group ID you provide. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/contactGroups/get?groupId=6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ ``` C# ```csharp // accessing metadata property requires beta version of the SDK at least v4.10.18-beta var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var groupContactClient = new GroupContactClient(apiClient); var contactgroupDetails = await groupContactClient.GetGroupContactAsync("6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN").ConfigureAwait(false); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: group_contacts_api = boldsign.GroupContactsApi(api_client) group_contacts = group_contacts_api.get_group_contact(group_id="YOUR_GROUP_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\GroupContactsApi($config); $result = $apiInstance->getGroupContact("YOUR_GROUP_ID"); ``` NodeJS ```js import { GroupContactsApi } from "boldsign"; const contactGroupApi = new GroupContactsApi(); contactGroupApi.setApiKey("YOUR_API_KEY"); var contactGroup = await contactGroupApi.getGroupContact("YOUR_GROUP_ID"); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); GroupContactsApi groupContactApi = new GroupContactsApi(apiClient); GetGroupContactDetails groupContactDetails = groupContactApi.getGroupContact("YOUR_GROUP_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="string" /%}{% required /%} - The ContactGroup ID of the User. {% /nestedtable %} ## Example response **_200 Success_** ```json { "groupName": "Grouptest", "groupId": "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN", "contacts": [ { "name": "LutherCooper", "email": "luthercooper@cubeflakes.com" } ], "creator": { "userId": "8797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN", "createdBy": "jack@gmail.com" }, "directories": ["Sales", "Legal"] } ``` --- # File: contactGroups\list-contactGroups.md # List ContactGroups {% get /%} {% path text="/v1/contactGroups/list" /%} This API allows you to get a list of contactgroups with access to the specified account. If a searchKey query is added to this API, you will get a response based on the searchKey keyword. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/contactGroups/list?PageSize=10&Page=1&SearchKey=xxxx&ContactType=MyContacts&Directories=Sales,Legal' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp // accessing metadata property requires beta version of the SDK at least v4.10.18-beta var apiClient = new ApiClient("https://api.boldsign.com", "apikey"); var groupContactClient = new GroupContactClient(apiClient); var result = await groupContactClient.ListGroupContactsAsync(1, 10).ConfigureAwait(false); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: group_contacts_api = boldsign.GroupContactsApi(api_client) list_contact_response = group_contacts_api.group_contact_list( page_size=10, page=1, contact_type="AllContacts", # or mycontacts directories=["directory1"] ) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\GroupContactsApi($config); $result = $apiInstance->groupContactList(page: 1, page_size: 10); ``` NodeJS ```js import { GroupContactsApi } from "boldsign"; const contactGroupApi = new GroupContactsApi(); contactGroupApi.setApiKey("YOUR_API_KEY"); var page = 1; var pageSize = 10; var contactGroups = await contactGroupApi.groupContactList(page, pageSize); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); GroupContactsApi groupContactApi = new GroupContactsApi(apiClient); GroupContactsList groupContactList = groupContactApi.groupContactList(1,10, null, null, null); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="PageSize" /%}{% batch datatype="integer" /%} - The number of results returned per page. The value must be between 1 and 100. The default value is 10. --- - {% arguments name="Page" /%}{% batch datatype="integer" /%}{% required /%} - The page number of the contact page to return. --- - {% arguments name="SearchKey" /%}{% batch datatype="string" /%} - Returns contactgroups of the searchKey results for a keyword. --- - {% arguments name="ContactType" /%}{% batch datatype="string" /%} - Type of Contacts such as `MyContacts` and `AllContacts`. --- - {% arguments name="Directories" /%}{% batch datatype="string" /%} - Group Contacts can be listed by the search based on the directories. {% /nestedtable %} ## Example response **_200 Success_** ```json { "pageDetails": { "pageSize": 10, "page": 1, "totalRecordsCount": 1, }, "result": [ { "groupName": "testgroup1", "groupId": "e892ea92-xxxx-xxxx-xxxx-bbdbcaa5xxxxc_pgVgo", "contacts": [ { "name": "xxxxx", "email": "cooper@cubeflakes.com" } ], "directories": ["Sales", "Legal"] } ] } ``` --- # File: contactGroups\update-contactGroup.md # Update ContactGroup {% put /%} {% path text="/v1/contactGroups/update" /%} This API allows you to update the group name, directories, and contacts in an existing contact group. ## Code snippet {% codetab %} cURL ```shell curl -X PUT 'https://api.boldsign.com/v1/contactGroups/update?groupId=10f9d70b-be90-42c3-9295-68d7a1545f40' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "GroupName": "Grouptest1000", "Contacts": [ { "Name": "Luther Cooper", "Email": "luthercooper@gmail.com" }, { "Name": "Hank White", "Email": "hankwhite@gmail.com" } ], "Directories": ["Sales", "Legal"] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var groupContactClient = new GroupContactClient(apiClient); var groupId = "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN"; var groupContact = new GroupContact () { GroupName = "Testsdk", Contacts = new List { new Contacts { Name = "LutherCooper", Email = "luthercooper@cubeflakes.com" }, new Contacts { Name = "hankwhite", Email = "hankwhite@cubeflakes.com" } }, Directories = new List { "Sales", "Legal" } }; await groupContactClient.UpdateGroupContactAsync(groupId, groupContact).ConfigureAwait(false); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: group_contacts_api = boldsign.GroupContactsApi(api_client) contact1 = boldsign.GroupUser( name="LutherCooper", email="luthercooper@cubeflakes.com" ) contact2 = boldsign.GroupUser( name="hankwhite", email="hankwhite@cubeflakes.com" ) update_group_contact = boldsign.UpdateGroupContact( groupName="Test Group", directories=["directory"], contacts=[contact1, contact2] ) group_contacts_api.update_group_contact( group_id="YOUR_GROUP_ID", update_group_contact=update_group_contact ) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\GroupContactsApi($config); $update_contact = new BoldSign\Model\UpdateGroupContact(); $update_contact->setDirectories(['new_directory_id_1']); $update_contact->setGroupName("Updated Group Name"); $apiInstance->updateGroupContact("YOUR_GROUP_ID", $update_contact); ``` NodeJS ```js import { GroupContactsApi, GroupUser, UpdateGroupContact } from "boldsign"; const contactGroupApi = new GroupContactsApi(); contactGroupApi.setApiKey("YOUR_API_KEY"); var groupUser1 = new GroupUser(); groupUser1.email = "luthercooper@cubeflakes.com"; groupUser1.name = "LutherCooper"; var updateGroupContact = new UpdateGroupContact(); updateGroupContact.contacts = [groupUser1]; updateGroupContact.groupName = "Group1 Updated"; updateGroupContact.directories = ["dictionary_1"]; contactGroupApi.updateGroupContact("YOUR_GROUP_ID",updateGroupContact); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); GroupContactsApi groupContactApi = new GroupContactsApi(apiClient); GroupUser groupUser1 = new GroupUser(); groupUser1.setName("LutherCooper"); groupUser1.setEmail("luthercooper@cubeflakes.com"); UpdateGroupContact groupContactDetails = new UpdateGroupContact(); groupContactDetails.setGroupName("Group A_Updated"); groupContactDetails.setContacts(Arrays.asList(groupUser1)); groupContactDetails.setDirectories(Arrays.asList("dict_1")); groupContactApi.updateGroupContact("YOUR_GROUP_ID", groupContactDetails); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="String" /%}{% required /%} - ContactGroup Id of the user. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the user. --- - {% arguments name="Contacts" /%}{% batch datatype="list" /%} - The list of the contacts {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="string" /%}{% required /%} - The name of the user --- - {% arguments name="Email" /%}{% batch datatype="string" /%}{% required /%} - the email of the user. {% /nestedtable %} --- - {% arguments name="Directories" /%}{% batch datatype="list" /%} - The list of directories to associate with the contact group. --- {% /nestedtable %} ## Example response **_200 No Content_** --- # File: contacts\create-contact.md # Contacts The contact's APIs are primarily used to interact with the BoldSign application to create, update, delete and get contact details. This section demonstrates how to create contact, update contact details, delete contact details, get contact details and get contact list from your Organizations. ## Create contact {% post /%} {% path text="/v1/contacts/create" /%} The create contact API is used to add contact details for adding signer details while creating document in BoldSign Application with their unique email address. ### Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/contacts/create' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '[ { "Email": "luthercooper@cubeflakes.com", "Name": "LutherCooper", "PhoneNumber": { "CountryCode": "+1", "Number": "2015550123" }, "JobTitle": "Developer", "CompanyName": "CubeFlakes" }, { "Email": "hankwhite@cubeflakes.com", "Name": "HankWhite", "PhoneNumber": { "CountryCode": "+1", "Number": "2015550124" }, "JobTitle": "Manager", "CompanyName": "CubeFlakes" } ]' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var contactClient = new ContactClient(apiClient); var contactDetails = new List() { new ContactDetails() { Email = "luthercooper@cubeflakes.com", Name = "LutherCooper" }, }; var contactCreated = contactClient.CreateContact(contactDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: contacts_api = boldsign.ContactsApi(api_client) contact_details = boldsign.ContactDetails( email="luthercooper@cubeflakes.com", name="LutherCooper") contact_created = contacts_api.create_contact([contact_details]) ``` PHP ```php setApiKey('YOUR_API_KEY'); $contacts_api = new ContactsApi($config); $create_contact = new ContactDetails(); $create_contact->setEmail('luthercooper@cubeflakes.com'); $create_contact->setName('LutherCooper'); $contact_details = array($create_contact); $contact_created = $contacts_api->createContact($contact_details); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); ContactsApi contactsApi = new ContactsApi(client); ContactDetails contactDetails = new ContactDetails(); contactDetails.setEmail("luthercooper@cubeflakes.com"); contactDetails.setName("LutherCooper"); CreateContactResponse contactCreated = contactsApi.createContact(Arrays.asList(contactDetails)); ``` NodeJS ```js import { ContactsApi, ContactDetails } from "boldsign"; const contactsApi = new ContactsApi(); contactsApi.setApiKey("YOUR_API_KEY"); const contactDetails = new ContactDetails(); contactDetails.name = "LutherCooper"; contactDetails.email = "luthercooper@cubeflakes.com"; const contactCreated = contactsApi.createContact([contactDetails]); ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="Email" /%}{% batch datatype="string" /%}{% required /%} - The email address of the user. --- - {% arguments name="Name" /%}{% batch datatype="string" /%}{% required /%} - The name of the user --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - The Phone Number of user {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="JobTitle" /%}{% batch datatype="string" /%} - The jobTitle of the user --- - {% arguments name="CompanyName" /%}{% batch datatype="string" /%} - The companyName of the user {% /nestedtable %} ### Example response **_200 Success_** ```json { "contacts": [ { "id": "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN", "email": "luthercooper@cubeflakes.com" }, { "id": "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_GsSVP", "email": "hankwhite@cubeflakes.com" } ] } ``` --- # File: contacts\delete-contacts.md # Delete Contact {% delete /%} {% path text="/v1/contacts/delete" /%} Deletes a contact from your account based on the contact id you have provided. ## Code snippet {% codetab %} cURL ```shell curl -X 'DELETE' \ 'https://api.boldsign.com/v1/contacts/delete?id=1b18b34d-aaae-4df8-aa8f-a93cda34379ac_pgVgo' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var contactClient = new ContactClient(apiClient); contactClient.DeleteContact("YOUR_CONTACT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: contacts_api = boldsign.ContactsApi(api_client) contacts_api.delete_contacts(id="YOUR_CONTACT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $contacts_api = new ContactsApi($config); $contacts_api->deleteContacts($id = 'YOUR_CONTACT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); ContactsApi contactsApi = new ContactsApi(client); contactsApi.deleteContacts("YOUR_CONTACT_ID"); ``` NodeJS ```js import { ContactsApi } from "boldsign"; const contactsApi = new ContactsApi(); contactsApi.setApiKey("YOUR_API_KEY"); contactsApi.deleteContacts("YOUR_CONTACT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="string" /%}{% required /%} - The ID of the contact to delete. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: contacts\get-contact-details.md # Get Contact {% get /%} {% path text="/v1/contacts/get" /%} This API allows you to get contact details based on the contact id you specified in the query parameter. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/contacts/get?id=6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var contactClient = new ContactClient(apiClient); var contactDetails = contactClient.GetContact("YOUR_CONTACT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: contacts_api = boldsign.ContactsApi(api_client) contact_details = contacts_api.get_contact(id="YOUR_CONTACT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $contacts_api = new ContactsApi($config); $contact_details = $contacts_api->getContact($id = 'YOUR_CONTACT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); ContactsApi contactsApi = new ContactsApi(client); ContactsDetails contactDetails = contactsApi.getContact("YOUR_CONTACT_ID"); ``` NodeJS ```js import { ContactsApi } from "boldsign"; const contactsApi = new ContactsApi(); contactsApi.setApiKey("YOUR_API_KEY"); const contactDetails = contactsApi.getContact("YOUR_CONTACT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="string" /%}{% required /%} - The Contact ID of the user. It can be obtained from the list contacts API or from the web app. {% /nestedtable %} ## Example response **_200 Success_** ```json { "contactId": "6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN", "name": "LutherCooper", "email": "luthercooper@cubeflakes.com", "companyName": "CubeFlakes", "jobTitle": "Developer", "phoneNumber": { "countryCode": "+1", "number": "2015550123" } } ``` --- # File: contacts\list-contacts.md # List Contacts {% get /%} {% path text="/v1/contacts/list" /%} This API allows you to get a list of contacts with access to the specified account. If a SearchKey query is added to this API, you will get a response based on the SearchKey keyword. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/contacts/list?pageSize=10&page=1&searchKey=xxxx&contactType=MyContacts' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var contactClient = new ContactClient(apiClient); var contactList = contactClient.ListContacts(1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: contacts_api = boldsign.ContactsApi(api_client) contact_list = contacts_api.contact_user_list(page=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $contacts_api = new ContactsApi($config); $contact_list = $contacts_api->contactUserList($page=1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); ContactsApi contactsApi = new ContactsApi(client); int page = 1; ContactsList contactList = contactsApi.contactUserList(page, null, null, null); ``` NodeJS ```js import { ContactsApi } from "boldsign"; const contactsApi = new ContactsApi(); contactsApi.setApiKey("YOUR_API_KEY"); const contactList = contactsApi.contactUserList(1); ``` {% /codetab %} ## Query paramters {% nestedtable %} - {% arguments name="pageSize" /%}{% batch datatype="integer" /%} - The number of results returned per page. The value must be between 1 and 100. The default value is 10. --- - {% arguments name="page" /%}{% batch datatype="integer" /%}{% required /%} - The page number of the contact page to return. --- - {% arguments name="searchKey" /%}{% batch datatype="string" /%} - Returns contacts of the searchKey results for a keyword. --- - {% arguments name="contactType" /%}{% batch datatype="string" /%} - Type of Contacts such as `MyContacts` and `AllContacts`. The default contact type is `AllContacts`. {% /nestedtable %} {% note %} **Note:** Please note that, the **All Contacts** folder in the web application displays all contacts added through both the web app and API. Additionally, if a user has been invited and has accepted the invitation, they will also be listed in the **All Contacts** page.{% /note %} ## Example response **_200 Success_** ```json { "pageDetails": { "pageSize": 10, "page": 1, "totalRecordsCount": 1 }, "result": [ { "id": "e892ea92-xxxx-xxxx-xxxx-bbdbcaa5xxxxc_pgVgo", "name": "xxxxx", "email": "cooper@cubeflakes.com", "companyName": "syncfusion", "role": "Engineer", "phoneNumber": { "countryCode": "+91", "number": "xxxxx78901" } } ] } ``` --- # File: contacts\update-contact.md # Update Contact {% put /%} {% path text="/v1/contacts/update" /%} Updates the email, name, phone number, job title and company name of the existing contact details. ## Code snippet {% codetab %} cURL ```shell curl -X PUT 'https://api.boldsign.com/v1/contacts/update?id=6797a07d-26d7-41fa-b3a8-c8f72378a7a6c_ErZHN' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "Email": "luthercooper@cubeflakes.com", "Name": "LutherCooper", "PhoneNumber": { "CountryCode": "+1", "Number": "2015550123" }, "JobTitle": "Developer", "CompanyName": "CubeFlakes" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var contactClient = new ContactClient(apiClient); var contactDetails = new ContactDetails() { Email = "hankwhite@cubeflakes.com", Name = "HankWhite", }; contactClient.UpdateContact("YOUR_CONTACT_ID", contactDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: contacts_api = boldsign.ContactsApi(api_client) contact_details = boldsign.ContactDetails( email="hankwhite@cubeflakes.com", name="HankWhite") contacts_api.update_contact(id="YOUR_CONTACT_ID", contact_details=contact_details) ``` PHP ```php setApiKey('YOUR_API_KEY'); $contacts_api = new ContactsApi($config); $contact_details = new ContactDetails(); $contact_details->setName('HankWhite'); $contact_details->setEmail('hankwhite@cubeflakes.com'); $contacts_api->updateContact($contactId = 'YOUR_CONTACT_ID', $contact_details); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); ContactsApi contactsApi = new ContactsApi(client); ContactDetails contactDetails = new ContactDetails(); contactDetails.setEmail("hankwhite@cubeflakes.com"); contactDetails.setName("HankWhite"); contactsApi.updateContact("YOUR_CONTACT_ID", contactDetails); ``` NodeJS ```js import { ContactsApi, ContactDetails } from "boldsign"; const contactsApi = new ContactsApi(); contactsApi.setApiKey("YOUR_API_KEY"); const contactDetails = new ContactDetails(); contactDetails.name = "Luther Cooper"; contactDetails.email = "luthercooper@cubeflakes.com"; contactsApi.updateContact("YOUR_CONTACT_ID", contactDetails); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="id" /%}{% batch datatype="String" /%}{% required /%} - The Contact ID of the user. It can be obtained from the list contacts API or from the web app. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="Email" /%}{% batch datatype="string" /%}{% required /%} - The email address of the user. --- - {% arguments name="Name" /%}{% batch datatype="string" /%}{% required /%} - The name of the user --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - The Phone Number of user {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="JobTitle" /%}{% batch datatype="string" /%} - The jobTitle of the user --- - {% arguments name="CompanyName" /%}{% batch datatype="string" /%} - The companyName of the user {% /nestedtable %} ## Example response **_200 No Content_** --- # File: custom-field\create-custom-field.md # Custom Field Custom field is the support that helps to speed up your document preparation by dragging and dropping the customized fields and eliminating repetitive modifications. Each field can be saved with frequently used values. Each field saved as a custom field will be associated with the brand. You can easily access the collection of saved custom fields and select the ones you need for a particular document. By dragging and dropping the desired custom fields into the document, you can quickly populate the necessary information without the need for manual entry or modification. ## Create custom field {% post /%} {% path text="/v1/customField/create" /%} To create a custom field using this API, provide essential details such as field name, field description, field order, and form field. These parameters are required for generating a custom field according to specific requirements and ensuring accurate customization. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/customField/create' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'Authorization: {{apiKey}}' \ -d '{ "FieldName": "string", "FieldDescription": "string", "FieldOrder": 1, "BrandId": "string", "SharedField": true, "FormField": { "FieldType": "Signature", "Font": "Courier", "Width": 60, "Height": 20, "IsRequired": true, "IsReadOnly": true, "Value": "string", "FontSize": 13, "FontHexColor": "string", "IsBoldFont": true, "IsItalicFont": true, "IsUnderLineFont": true, "LineHeight": 15, "CharacterLimit": 0, "PlaceHolder": "string", "ValidationType": "NumbersOnly", "ValidationCustomRegex": "string", "ValidationCustomRegexMessage": "string", "DateFormat": "string", "TimeFormat": "string", "ImageInfo": { "AllowedFileExtensions": "string", "Title": "string", "Description": "string" }, "AttachmentInfo": { "AllowedFileTypes": "string", "Title": "string", "Description": "string", "AcceptedFileTypes": [ "string", "string" ] }, "EditableDateFieldSettings": { "DateFormat": "string", "MinDate": ""2023-06-26T04:11:52.213Z"", "MaxDate": ""2023-06-26T04:11:52.213Z"" }, "HyperlinkText": "string", "DataSyncTag": "string", "DropdownOptions": [ "string", "string" ], "TextAlign": "Center", "TextDirection": "LTR", "CharacterSpacing": 0, "IdPrefix": "string", "RestrictIdPrefixChange": false, "BackgroundHexColor": "string" } }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var customFieldClient = new CustomFieldClient(apiClient); List customFormField = new List { new CustomFormField(FieldType.Signature) }; var customFieldDetails = new BrandCustomFieldDetails() { FieldName = "string", BrandId = "YOUR_BRAND_ID", SharedField = true, FormField = customFormField[0] }; var customFieldCreated = customFieldClient.CreateCustomField(customFieldDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: custom_field_api = boldsign.CustomFieldApi(api_client) custom_form_field = boldsign.CustomFormField(fieldType="Signature") custom_field_details = boldsign.BrandCustomFieldDetails( fieldName="string", brandId="YOUR_BRAND_ID", sharedField=True, formField=custom_form_field) custom_field_created = custom_field_api.create_custom_field(custom_field_details) ``` PHP ```php setApiKey('YOUR_API_KEY'); $custom_field_api = new CustomFieldApi($config); $custom_form_field = new CustomFormField(); $custom_form_field->setFieldType('Signature'); $custom_field_details = new BrandCustomFieldDetails(); $custom_field_details->setFieldName('string'); $custom_field_details->setBrandId('YOUR_BRAND_ID'); $custom_field_details->setSharedField(true); $custom_field_details->setFormField($custom_form_field); $custom_field_created = $custom_field_api->createCustomField($custom_field_details); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); CustomFieldApi customFieldApi = new CustomFieldApi(client); CustomFormField customFormField = new CustomFormField(); customFormField.setFieldType(CustomFormField.FieldTypeEnum.SIGNATURE); BrandCustomFieldDetails customFieldDetails = new BrandCustomFieldDetails(); customFieldDetails.setFieldName("string"); customFieldDetails.setBrandId("YOUR_BRAND_ID"); customFieldDetails.setSharedField(true); customFieldDetails.setFormField(customFormField); CustomFieldMessage customFieldCreated = customFieldApi.createCustomField(customFieldDetails); ``` NodeJS ```js import { CustomFieldApi, BrandCustomFieldDetails, CustomFormField } from "boldsign"; const customFieldApi = new CustomFieldApi(); customFieldApi.setApiKey("YOUR_API_KEY"); const customFormField = new CustomFormField(); customFormField.fieldType = CustomFormField.FieldTypeEnum.Signature; const customFieldDetails = new BrandCustomFieldDetails(); customFieldDetails.fieldName = "string"; customFieldDetails.brandId = "YOUR_BRAND_ID"; customFieldDetails.sharedField = true; customFieldDetails.formField = customFormField; const customFieldCreated = customFieldApi.createCustomField(customFieldDetails); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="FieldName" /%}{% batch datatype="string" /%} - The name of the custom field you want to create. For example, you can use "My Custom Field" as the field name. --- - {% arguments name="FieldDescription" /%}{% batch datatype="string" /%} - A brief description or additional information about the custom field. --- - {% arguments name="FieldOrder" /%}{% batch datatype="string" /%} - The order or position of the custom field within a list of form fields. --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - The unique identifier associated with the brand for which the custom field is being created. This property allows you to associate the custom field specifically with a particular brand within your organization. --- - {% arguments name="SharedField" /%}{% batch datatype="boolean" /%} - This property indicates whether the custom field is intended to be shared across users within your organization. If set to true, the field will be accessible and visible to all users in your organization. On the other hand, if set to false, the field will be specific to your individual account and not visible or accessible to other users. Choose true or false based on your specific requirements. --- - {% arguments name="FormField" /%}{% batch datatype="object" /%} - The custom form field associated with the brand. {% nestedtable %} - {% arguments name="FieldType" /%}{% batch datatype="string" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="Width" /%}{% batch datatype="float" /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - Height of the form field. The height must be greater than zero. --- - {% arguments name="IsReadOnly" /%}{% batch datatype="boolean" /%} - Decides whether this form field is readOnly or not. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. The default size font is **13.0** . --- - {% arguments name="Font " /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica` and `TimesNewRoman` . The default font family is ` Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed on the textbox form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="string" /%} - Type of validation for the textbox form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email`, and `None`. The default validation type is `None` . --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex.` --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the textbox form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that are allowed to upload on the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that are allowed to upload on the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFomat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate" /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values that have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="IdPrefix" /%}{% batch datatype="string" /%} - This property holds the initial part of the ID which will be combined with a numerical count. --- - {% arguments name="RestrictIdPrefixChange" /%}{% batch datatype="boolean" /%} - This boolean property indicates whether the modification of the ID prefix is allowed or not. When set to true, it restricts the sender from altering the ID prefix. --- - {% arguments name="BackgroundHexColor" /%}{% batch datatype="string" /%} - This property specifies the color that will be used for the background of the label field. The value should be a hex color code. Example - `#FFFFFF`. --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} {% /nestedtable %} ## Example response ***200 Success*** ```json { "customFieldId": "e33502d4-xxxx-xxxx-xxxx-6v3n85d51948", "message": "Custom field saved successfully." } ``` --- # File: custom-field\delete-custom-field.md # Delete custom field {% delete /%} {% path text="/v1/customField/delete" /%} With this API, users can easily delete a custom field by specifying the field ID, enabling seamless removal of unnecessary fields and maintaining an organized custom field collection. ## Code snippet {% codetab %} cURL ```shell curl -X DELETE 'https://api.boldsign.com/v1/customField/delete?customFieldId={customFieldId}' \ -H 'Accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'Authorization: {{apiKey}}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var customFieldClient = new CustomFieldClient(apiClient); customFieldClient.DeleteCustomField("CUSTOM_FIELD_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: custom_field_api = boldsign.CustomFieldApi(api_client) custom_field_api.delete_custom_field(custom_field_id="CUSTOM_FIELD_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $custom_field_api = new CustomFieldApi($config); $custom_field_api->deleteCustomField($custom_field_id = 'YOUR_CUSTOMFIELD_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); CustomFieldApi customFieldApi = new CustomFieldApi(client); customFieldApi.deleteCustomField("CUSTOM_FIELD_ID"); ``` NodeJS ```js import { CustomFieldApi } from "boldsign"; const customFieldApi = new CustomFieldApi(); customFieldApi.setApiKey("YOUR_API_KEY"); customFieldApi.deleteCustomField("YOUR_CUSTOMFIELD_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="customFieldId" /%}{% batch datatype="string" /%}{% required /%} - The custom field Id obtained after successful custom field creation needs to be passed to delete the custom field. {% /nestedtable %} ## Example response ***200 Success*** ```json { "message": "Custom field deleted successfully." } ``` --- # File: custom-field\edit-custom-field.md # Edit a custom field {% post /%} {% path text="/v1/customField/edit" /%} This API allows users to modify the details of a custom field by providing the field ID and the updated field information, such as field name, field description, field order, and form field, ensuring flexibility in custom field management. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/customField/edit?customFieldId={customFieldId}' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'Authorization: {{apiKey}}' \ -d '{ "FieldName": "string", "FieldDescription": "string", "FieldOrder": 1, "BrandId": "string", "SharedField": true, "FormField": { "FieldType": "Signature", "Font": "Courier", "Width": 60, "Height": 20, "IsRequired": true, "IsReadOnly": true, "Value": "string", "FontSize": 13, "FontHexColor": "string", "IsBoldFont": true, "IsItalicFont": true, "IsUnderLineFont": true, "LineHeight": 15, "CharacterLimit": 0, "PlaceHolder": "string", "ValidationType": "NumbersOnly", "ValidationCustomRegex": "string", "ValidationCustomRegexMessage": "string", "DateFormat": "string", "TimeFormat": "string", "ImageInfo": { "AllowedFileExtensions": "string", "Title": "string", "Description": "string" }, "AttachmentInfo": { "AllowedFileTypes": "string", "Title": "string", "Description": "string", "AcceptedFileTypes": [ "string", "string" ] }, "EditableDateFieldSettings": { "DateFormat": "string", "MinDate": "2023-06-26T05:56:38.655Z", "MaxDate": "2023-06-26T05:56:38.655Z" }, "HyperlinkText": "string", "DataSyncTag": "string", "DropdownOptions": [ "string", "string" ], "TextAlign": "Center", "TextDirection": "LTR", "CharacterSpacing": 0, "IdPrefix": "string", "RestrictIdPrefixChange": false, "BackgroundHexColor": "string" } }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var customFieldClient = new CustomFieldClient(apiClient); List customFormField = new List { new CustomFormField(FieldType.Signature) }; var customFieldDetails = new BrandCustomFieldDetails() { FieldName = "string", BrandId = "YOUR_BRAND_ID", SharedField = true, FormField = customFormField[0] }; var customFieldMessage = customFieldClient.EditCustomField("YOUR_CUSTOMFIELD_ID", customFieldDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: custom_field_api = boldsign.CustomFieldApi(api_client) custom_form_field = boldsign.CustomFormField(fieldType="Signature") custom_field_details = boldsign.BrandCustomFieldDetails( fieldName="string", brandId="YOUR_BRAND_ID", sharedField=True, formField=custom_form_field) custom_field_message = custom_field_api.edit_custom_field(custom_field_id="CUSTOM_FIELD_ID", brand_custom_field_details=custom_field_details) ``` PHP ```php setApiKey('YOUR_API_KEY'); $custom_field_api = new CustomFieldApi($config); $custom_form_field = new CustomFormField(); $custom_form_field->setFieldType('Signature'); $custom_field_details = new BrandCustomFieldDetails(); $custom_field_details->setFieldName('string'); $custom_field_details->setBrandId('YOUR_BRAND_ID'); $custom_field_details->setSharedField(true); $custom_field_details->setFormField($custom_form_field); $custom_field_message = $custom_field_api->editCustomField($custom_field_id='YOUR_CUSTOM_FIELD_ID', $custom_field_details); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); CustomFieldApi customFieldApi = new CustomFieldApi(client); CustomFormField customFormField = new CustomFormField(); customFormField.setFieldType(CustomFormField.FieldTypeEnum.SIGNATURE); BrandCustomFieldDetails customFieldDetails = new BrandCustomFieldDetails(); customFieldDetails.setFieldName("string"); customFieldDetails.setBrandId("YOUR_BRAND_ID"); customFieldDetails.setSharedField(true); customFieldDetails.setFormField(customFormField); CustomFieldMessage customFieldMessage = customFieldApi.editCustomField("CUSTOM_FIELD_ID", customFieldDetails); ``` NodeJS ```js import { CustomFieldApi, BrandCustomFieldDetails, CustomFormField } from "boldsign"; const customFieldApi = new CustomFieldApi(); customFieldApi.setApiKey("YOUR_API_KEY"); const customFormField = new CustomFormField(); customFormField.fieldType = CustomFormField.FieldTypeEnum.Signature; const customFieldDetails = new BrandCustomFieldDetails(); customFieldDetails.fieldName = "string"; customFieldDetails.brandId = "YOUR_BRAND_ID"; customFieldDetails.sharedField = true; customFieldDetails.formField = customFormField; const customFieldMessage = customFieldApi.editCustomField("YOUR_CUSTOM_FIELD_ID", customFieldDetails); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="customFieldId" /%}{% batch datatype="string" /%}{% required /%} - The custom field Id obtained after successful custom field creation needs to be passed to edit the custom field. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="FieldName" /%}{% batch datatype="string" /%} - The name of the custom field you want to create. For example, you can use "My Custom Field" as the field name. --- - {% arguments name="FieldDescription" /%}{% batch datatype="string" /%} - A brief description or additional information about the custom field. --- - {% arguments name="FieldOrder" /%}{% batch datatype="string" /%} - The order or position of the custom field within a list of form fields. --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - The unique identifier associated with the brand for which the custom field is being created. This property allows you to associate the custom field specifically with a particular brand within your organization. --- - {% arguments name="SharedField" /%}{% batch datatype="boolean" /%} - This property indicates whether the custom field is intended to be shared across users within your organization. If set to true, the field will be accessible and visible to all users in your organization. On the other hand, if set to false, the field will be specific to your individual account and not visible or accessible to other users. Choose true or false based on your specific requirements. --- - {% arguments name="FormField" /%}{% batch datatype="object" /%} - The custom form field associated with the brand. {% nestedtable %} - {% arguments name="FieldType" /%}{% batch datatype="string" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="Width" /%}{% batch datatype="float" /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - Height of the form field. The height must be greater than zero. --- - {% arguments name="IsReadOnly" /%}{% batch datatype="boolean" /%} - Decides whether this form field is readOnly or not. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. The default size font is **13.0** . --- - {% arguments name="Font " /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica`,and `TimesNewRoman`. The default font family is ` Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed in the textbox form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="string" /%} - Type of validation for the textbox form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email` and `None`. The default validation type is `None` . --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex.` --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the textbox form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that are allowed to upload on the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that are allowed to upload on the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFomat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate" /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values that have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="IdPrefix" /%}{% batch datatype="string" /%} - This property holds the initial part of the ID which will be combined with a numerical count. --- - {% arguments name="RestrictIdPrefixChange" /%}{% batch datatype="boolean" /%} - This boolean property indicates whether the modification of the ID prefix is allowed or not. When set to true, it restricts the sender from altering the ID prefix. --- - {% arguments name="BackgroundHexColor" /%}{% batch datatype="string" /%} - This property specifies the color that will be used for the background of the label field. The value should be a hex color code. Example - `#FFFFFF`. --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} {% /nestedtable %} ## Example response ***200 Success*** ```json { "customFieldId": "e33502d4-xxxx-xxxx-xxxx-6v3n85d51948", "message": "Custom field edited successfully." } ``` --- # File: custom-field\embedded-custom-field-create-url.md # Embedded Custom Field Create URL {% post /%} {% path text="/v1/customField/createEmbeddedCustomFieldUrl" /%} This API enables users to generate an embedded custom field creation link, which can be seamlessly integrated into their applications through an iFrame or opened in a web browser to create, edit, or delete custom fields directly. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/customField/createEmbeddedCustomFieldUrl?brandId={brandId}&linkValidTill=2023-05-06T09%3A12%3A28Z' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -d '' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var customFieldClient = new CustomFieldClient(apiClient); var embeddedCustomFieldDetails = new EmbeddedCustomFieldDetails() { BrandId = "YOUR_BRAND_ID", }; var embeddedCustomFieldCreated = customFieldClient.CreateEmbeddedCustomFieldUrl(embeddedCustomFieldDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: custom_field_api = boldsign.CustomFieldApi(api_client) embedded_custom_field_created = custom_field_api.embed_custom_field(brand_id="YOUR_BRAND_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $custom_field_api = new CustomFieldApi($config); $embedded_custom_field_created = $custom_field_api->embedCustomField($brand_id = 'YOUR_BRAND_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); CustomFieldApi customFieldApi = new CustomFieldApi(client); OffsetDateTime linkValidTill = OffsetDateTime.parse("VALID_DATE"); EmbeddedCustomFieldCreated embeddedCustomFieldCreated = customFieldApi.embedCustomField("YOUR_BRAND_ID", linkValidTill); ``` NodeJS ```js import { CustomFieldApi } from "boldsign"; const customFieldApi = new CustomFieldApi(); customFieldApi.setApiKey("YOUR_API_KEY"); const embeddedCustomFieldCreated = customFieldApi.embedCustomField("YOUR_BRAND_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="brandId" /%}{% batch datatype="string" /%}{% required /%} - The brand ID needs to be passed to generate an embedded custom field URL. --- - {% arguments name="linkValidTill" /%}{% batch datatype="string" /%} - Configure the expiration for the generated URL. A maximum of 30 days can be assigned. The string should be in date-time format. {% /nestedtable %} ## Example response ***200 Success*** ```json { "createUrl": "https://app.boldsign.com/document/configure-custom-field/?brandId=8e5da275-xxxx-xxxx-xxxx-e936d8619cac_hSWgo" } ``` --- # File: custom-field\list-custom-field.md # List custom fields {% get /%} {% path text="/v1/customField/list" /%} This API retrieves a list of all custom fields associated with a specific brand, identified by the brand ID. It provides users with a comprehensive overview of their custom field inventory within the brand, including field IDs, names, descriptions, order, and form field. ## Code snippet {% codetab %} cURL ```shell curl --location 'https://api.boldsign.com/v1/customField/list?brandId={brandId}' \ --header 'Accept: application/json' \ --header 'Authorization: {{apiKey}}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var customFieldClient = new CustomFieldClient(apiClient); var customFieldCollection = customFieldClient.GetBrandBasedCustomFields("YOUR_BRAND_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: custom_field_api = boldsign.CustomFieldApi(api_client) custom_field_collection = custom_field_api.custom_fields_list(brand_id="YOUR_BRAND_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $custom_field_api = new CustomFieldApi($config); $custom_field_collection = $custom_field_api->customFieldsList($brand_id = 'YOUR_BRAND_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); CustomFieldApi customFieldApi = new CustomFieldApi(client); CustomFieldCollection customFieldCollection = customFieldApi.customFieldsList("YOUR_BRAND_ID"); ``` NodeJS ```js import { CustomFieldApi } from "boldsign"; const customFieldApi = new CustomFieldApi(); customFieldApi.setApiKey("YOUR_API_KEY"); const customFieldCollection = customFieldApi.customFieldsList("YOUR_BRAND_ID"); ``` {% /codetab %} ## Example response ***200 Success*** ```json { "result": [ { "customFieldId": "string", "fieldName": "string", "fieldDescription": "string", "fieldOrder": 0, "brandId": "string", "sharedField": true, "formField": { "fieldType": "Signature", "width": 0, "height": 0, "isRequired": true, "isReadOnly": true, "value": "string", "fontSize": 13, "font": "Helvetica", "fontHexColor": "string", "isBoldFont": true, "isItalicFont": true, "isUnderLineFont": true, "lineHeight": 15, "characterLimit": 0, "placeHolder": "string", "validationType": "None", "validationCustomRegex": "string", "validationCustomRegexMessage": "string", "dateFormat": "string", "timeFormat": "string", "imageInfo": { "title": "string", "description": "string", "allowedFileExtensions": "string" }, "attachmentInfo": { "title": "string", "description": "string", "acceptedFileTypes": [ "string" ] }, "editableDateFieldSettings": { "dateFormat": "string", "minDate": "2023-06-26T06:17:19.385Z", "maxDate": "2023-06-26T06:17:19.385Z" }, "hyperlinkText": "string", "dataSyncTag": "string", "dropdownOptions": [ "string" ], "textAlign": "Left", "textDirection": "LTR", "characterSpacing": 0, "idPrefix": "string", "restrictIdPrefixChange": false, "backgroundHexColor": "string" } } ] } ``` --- # File: documents\add-authentication-to-the-document.md # Add authentication to the document {% patch /%} {% path text="/v1/document/addAuthentication" /%} The sender can enable authentication for the document, which secures the signing page. Each recipient must authenticate themselves before opening the document to sign. There are three types of Authentication: AccessCode, EmailOTP, and SMSOTP. - AccessCode - A set of alphanumeric characters will be specified by the sender to the recipient for accessing the document, and the sender needs to provide the secure code directly to the recipient. - EmailOTP - A system generated one time password will be delivered to the recipient's mailbox that is required to access the document. - SMSOTP - A system generated one time password will be delivered to the recipient's phone number that is required to access the document. ## Code snippet The following sample code snippet requests the EmailOTP authentication to be added to one of the document's recipients. {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AuthenticationType\": \"EmailOTP\", \"EmailId\": \"alexgayle@cubeflakes.com\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.AddAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com", AuthenticationType.EmailOTP); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_detail = boldsign.AccessCodeDetail( authenticationType="EmailOTP", emailId="alexgayle@cubeflakes.com") document_api.add_authentication(document_id="YOUR_DOCUMENT_ID", access_code_detail=access_code_detail) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $access_code_detail = new AccessCodeDetail(); $access_code_detail->setAuthenticationType('EmailOTP'); $access_code_detail->setEmailId('alexgayle@cubeflakes.com'); $document_api->addAuthentication($document_id = 'YOUR_DOCUMENT_ID', $access_code_detail); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); AccessCodeDetail accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.setAuthenticationType(AccessCodeDetail.AuthenticationTypeEnum.EMAIL_OTP); accessCodeDetail.setEmailId("alexgayle@cubeflakes.com"); documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` NodeJS ```js import { DocumentApi, AccessCodeDetail } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.authenticationType = AccessCodeDetail.AuthenticationTypeEnum.EmailOtp; accessCodeDetail.emailId = "alexgayle@boldsign.dev"; documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` {% /codetab %} The following sample code snippet requests the AccessCode authentication to be added to one of the document's recipients. {% codetab id="codetab2" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" -H -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AccessCode\": \"123456\", \"AuthenticationType\": \"AccessCode\", \"EmailId\": \"alexgayle@cubeflakes.com\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.AddAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com", AuthenticationType.AccessCode, null, "123456"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_detail = boldsign.AccessCodeDetail( authenticationType="AccessCode", accessCode="123456", emailId="alexgayle@cubeflakes.com") document_api.add_authentication(document_id="YOUR_DOCUMENT_ID", access_code_detail=access_code_detail) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $access_code_detail = new AccessCodeDetail(); $access_code_detail->setAuthenticationType('AccessCode'); $access_code_detail->setAccessCode('123456'); $access_code_detail->setEmailId('alexgayle@cubeflakes.com'); $document_api->addAuthentication($document_id = 'YOUR_DOCUMENT_ID', $access_code_detail); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); AccessCodeDetail accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.setAuthenticationType(AccessCodeDetail.AuthenticationTypeEnum.ACCESS_CODE); accessCodeDetail.setAccessCode("123456"); accessCodeDetail.setEmailId("alexgayle@cubeflakes.com"); documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` NodeJS ```js import { AccessCodeDetail, DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.authenticationType = AccessCodeDetail.AuthenticationTypeEnum.AccessCode; accessCodeDetail.accessCode = "123456"; accessCodeDetail.emailId = "alexgayle@cubeflakes.com"; documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` {% /codetab %} The following code sample snippet requests the SMS OTP authentication to be added to one of the document's recipients. {% codetab id="codetab4" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" -H -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AuthenticationType\": \"SMSOTP\", \"EmailId\": \"alexgayle@cubeflakes.com\", \"PhoneNumber\": {\"CountryCode\": \"+1\", \"Number\": \"2015666802\"}}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var phoneNumber = new PhoneNumber() { CountryCode = "+1", Number = "2015666802" }; documentClient.AddAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com", AuthenticationType.SMSOTP, null, phoneNumber: phoneNumber); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_detail = boldsign.AccessCodeDetail( authenticationType="SMSOTP", emailId="alexgayle@cubeflakes.com", phone_number = boldsign.PhoneNumber( country_code="+1", number="2015666802")) document_api.add_authentication(document_id="YOUR_DOCUMENT_ID", access_code_detail=access_code_detail) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $phone_number = new PhoneNumber(); $phone_number->setCountryCode('+1'); $phone_number->setNumber('2015666802'); $access_code_detail = new AccessCodeDetail(); $access_code_detail->setAuthenticationType('SMSOTP'); $access_code_detail->setPhoneNumber($phone_number); $access_code_detail->setEmailId('alexgayle@cubeflakes.com'); $document_api->addAuthentication($document_id = 'YOUR_DOCUMENT_ID', $access_code_detail); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PhoneNumber phoneNumber = new PhoneNumber(); phoneNumber.setCountryCode("+1"); phoneNumber.setNumber("201566802"); AccessCodeDetail accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.setAuthenticationType(AccessCodeDetail.AuthenticationTypeEnum.SMSOTP); accessCodeDetail.setPhoneNumber(phoneNumber); accessCodeDetail.setEmailId("alexgayle@cubeflakes.com"); documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` NodeJS ```js import { AccessCodeDetail, DocumentApi, PhoneNumber } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const phoneNumber = new PhoneNumber(); phoneNumber.countryCode = "+1"; phoneNumber.number = "201566802"; const accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.authenticationType = AccessCodeDetail.AuthenticationTypeEnum.Smsotp; accessCodeDetail.phoneNumber = phoneNumber; accessCodeDetail.emailId = "alexgayle@cubeflakes.com"; documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` {% /codetab %} If a document contains repeated signers with signing order, in that case the recipient's signing order can be specified along with the signer's email to add the EmailOTP authentication request, as shown in the following code snippet. {% codetab id="codetab3" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" -H -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AuthenticationType\": \"EmailOTP\", \"EmailId\": \"alexgayle@cubeflakes.com\", \"Order\": 2}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.AddAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com", AuthenticationType.EmailOTP, 1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_detail = boldsign.AccessCodeDetail( authenticationType="EmailOTP", emailId="alexgayle@cubeflakes.com", order=1) document_api.add_authentication(document_id="YOUR_DOCUMENT_ID", access_code_detail=access_code_detail) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $access_code_detail = new AccessCodeDetail(); $access_code_detail->setAuthenticationType('EmailOTP'); $access_code_detail->setEmailId('alexgayle@cubeflakes.com'); $access_code_detail->setOrder(1); $document_api->addAuthentication($document_id = 'YOUR_DOCUMENT_ID', $access_code_detail); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); AccessCodeDetail accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.setAuthenticationType(AccessCodeDetail.AuthenticationTypeEnum.EMAIL_OTP); accessCodeDetail.setEmailId("alexgayle@cubeflakes.com"); accessCodeDetail.setOrder(1); documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` NodeJS ```js import { AccessCodeDetail, DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const accessCodeDetail = new AccessCodeDetail(); accessCodeDetail.authenticationType = AccessCodeDetail.AuthenticationTypeEnum.EmailOtp; accessCodeDetail.emailId = "alexgayle@cubeflakes.com"; accessCodeDetail.order = 1; documentApi.addAuthentication("YOUR_DOCUMENT_ID", accessCodeDetail); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="AccessCode" /%}{% batch datatype="string" /%} - Access code is required when using AccessCode type of authentication. Otherwise, it should be empty. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="string" /%}{% required /%} - It includes AccessCode and EmailOTP authentications. If you prefer EmailOTP authentication, set the `DisableEmails` property in the document to false. If you prefer AccessCode authentication, you must share the access code to the recipient directly. --- - {% arguments name="EmailId" /%}{% batch datatype="String" /%}{% required /%} - Email address of the signer. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - If the document is created on behalf of the sender, the sender's identity email address must be specified. --- - {% arguments name="Order" /%}{% batch datatype="integer" /%} - A number that denotes the signer's order, which targets the given email address present in the recipient list. The order should be in the range of 1 - 50. --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature. After which, they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. Maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When the authentication type is specified as SMSOTP, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable int" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} **Note:** For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ## Example response ***200 Success*** --- # File: documents\add-document-tags.md # Add document tags {% patch /%} {% path text="/v1/document/addTags" /%} You can add tags (labels) to the document while creating it or after sending it, with your tenant IDs or any unique ID to make it easy to fetch or list documents based on tenants or users. Added tags can be accessed by all users within the same organization who have document permission. Please refer to the {% customlink href="/documents/send-document/" text="Send document" /%} article, for adding tags (labels) while creating the document. ## Code snippet {% codetab %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addTags" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"DocumentId\": \"{documentId}\", \"Tags\": [\"test\", \"api\"]}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var addtag = new DocumentTags() { DocumentId = "YOUR_DOCUMENT_ID", Tags = new List() { "test", "api" }, }; documentClient.AddTag(addtag); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_tags = boldsign.DocumentTags( documentId="YOUR_DOCUMENT_ID", tags=["test", "api"]) document_api.add_tag(document_tags) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_tags = new DocumentTags(); $document_tags->setDocumentId('YOUR_DOCUMENT_ID'); $document_tags->setTags(['test', 'api']); $document_api->addTag($document_tags); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); DocumentTags documentTags = new DocumentTags(); documentTags.setDocumentId("YOUR_DOCUMENT_ID"); documentTags.setTags(Arrays.asList("test", "api")); documentApi.addTag(documentTags); ``` NodeJS ```js import { DocumentApi, DocumentTags } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentTags = new DocumentTags(); documentTags.documentId = "YOUR_DOCUMENT_ID"; documentTags.tags = ["test", "api"]; documentApi.addTag(documentTags); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="DocumentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document --- - {% arguments name="Tags" /%}{% batch datatype="String" /%}{% required /%} - A collection of tags that will be added to the document. It can only contain a maximum of 50 tags. Each tag cannot exceed 255 characters and cannot contain white space. {% /nestedtable %} ## Example response ***200 Success*** --- # File: documents\behalf-list-documents.md # Behalf list documents {% get /%} {% path text="/v1/document/behalfList" /%} By using sender identities, users are able to send documents on behalf of another individual upon receiving their approval. These documents will not appear in the standard listing or team document listing APIs; instead, they can only be accessed through this exclusive behalf listing API. The primary purpose of the sender identity and behalf listing feature is to equip users with the necessary tools to implement multi-tenancy using the BoldSign API. This API facilitates the listing of documents sent on behalf of others from an account and offers various options for filtering the document listing, such as displaying documents sent on behalf of a specific person. Additionally, it can list documents sent on your behalf using `pageType`, provided you have granted permission to another BoldSign user. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/behalfList?status=WaitingForOthers&pageSize=10&page=1&pageType=BehalfOfMe' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var behalfDocumentRecords = documentClient.ListBehalfDocuments(1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) behalf_document_records = document_api.behalf_documents(page=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $behalf_document_records = $document_api->behalfDocuments($page=1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); int page=1; BehalfDocumentRecords behalfDocumentRecords = documentApi.behalfDocuments(page, null, null, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const behalfDocumentRecords = documentApi.behalfDocuments(1); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="page" /%}{% batch datatype="integer" /%}{% required /%} - The page number used for navigating between different pages. The default value is `1`. --- - {% arguments name="pageSize" /%}{% batch datatype="integer" /%} - The number of documents to include per page. Defaults to `10`. Maximum is `100`. --- - {% arguments name="pageType" /%}{% batch datatype="string" /%} - One of `BehalfOfOthers` or `BehalfOfMe` to list documents only sent on behalf of others or you. Defaults to `BehalfOfOthers`. --- - {% arguments name="status" /%}{% batch datatype="array" /%} - Filter documents based on their status, one of `None`, `WaitingForMe`, `WaitingForOthers`, `NeedAttention`, `Completed`, `Declined`, `Revoked`, `Expired`, and `Draft`. Defaults to `None`. --- - {% arguments name="signers" /%}{% batch datatype="array" /%} - Filter documents by specifying the signer's email address. One or more emails can be used to filter documents. --- - {% arguments name="emailAddress" /%}{% batch datatype="array" /%} - Filter documents by specifying the sender identity's email address. One or more emails can be used to filter documents. --- - {% arguments name="searchKey" /%}{% batch datatype="string" /%} - Search for documents using a keyword. The keyword will be applied to fields such as document title, document ID, sender's name, or signer's name, etc. --- - {% arguments name="startDate" /%}{% batch datatype="string" /%} - Filter documents using the start date range of the document. The string should be in a date-time format. --- - {% arguments name="endDate" /%}{% batch datatype="string" /%} - Filter documents using the end date range of the document. The string should be in a date-time format. --- - {% arguments name="labels" /%}{% batch datatype="array" /%} - Filter documents using the Labels (tags) specified in the document. --- - {% arguments name="nextCursor" /%}{% batch datatype="int" /%} - To facilitate pagination and fetch the next set of documents beyond 10,000 records, it is necessary to set the `nextCursor` value. This should be the `cursor` value of the last document retrieved, e.g., `nextCursor: 1689815402493`. --- - {% arguments name="brandIds" /%}{% batch datatype="array" /%} - Filters documents based on their associated brand IDs. The brand ID filter applies only to new documents created on or after `Oct 4th, 2024`. {% /nestedtable %} ## Example response ***200 Success*** ```json { "pageDetails": { "pageSize": 10, "page": 1, "totalRecordsCount": 28, "totalPages": 3, "sortedColumn": "activityDate", "sortDirection": "DESC" }, "result": [ { "behalfOf": { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com" }, "documentId": "755195d8-xxxx-xxxx-xxxx-88ff77d35419", "senderDetail": { "name": "Richard", "privateMessage": null, "emailAddress": "richard@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false } ], "createdDate": 1664961706, "activityDate": 1665989290, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "565", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": true, "privateMessage": "", "formFields": [], "language": 0 } ], "expiryDate": 1670178599, "enableSigningOrder": false, "isDeleted": false, "labels": [], "nextCursor": 1665989290, "brandId": "95e2fbd3-dd01-469c-b4dc-e2e39a33c561" }, { "behalfOf": { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com" }, "documentId": "655195d8-xxxx-xxxx-xxxx-88ff77d35531", "senderDetail": { "name": "Alex Gayle", "privateMessage": null, "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "richard@cubeflakes.com", "isViewed": false } ], "createdDate": 1665988967, "activityDate": 1665988967, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "Agreement", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "richard@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0 }, { "signerName": "Alex Gayle", "signerRole": "", "signerEmail": "alexgayle@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 2, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0 } ], "expiryDate": 1671820199, "enableSigningOrder": false, "isDeleted": false, "labels": [ "Agreement" ], "nextCursor": 1689815402493, "brandId": "95e2fbd3-dd01-469c-b4dc-e2e39a33c561" } ] } ``` --- # File: documents\cancel-editing.md # Cancel editing The Cancel Editing API allows you to cancel the editing of a document that is currently in edit mode. ## Cancel document editing {% post /%} {% path text="/v1/document/cancelEditing" /%} Cancelling the edit of a document that’s already in edit mode can be done using this API, but you must be the sender of that document. If the document was sent on behalf of someone else, you’ll need to have that sender’s identity verified in your account before you can cancel the edit. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/cancelEditing?documentId=625cff3d...&onBehalfOf=sender@yourdomain.com' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var cancelEdit = new CancelDocumentEditingRequest() { DocumentId = "625cff3d...", OnBehalfOf = "sender@yourdomain.com" }; var editCancelled = await documentClient.CancelEditingAsync(cancelEdit); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_api.cancel_editing( document_id="YOUR_DOCUMENT_ID", on_behalf_of="sender@yourdomain.com") ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = DocumentApi($config); $apiInstance->cancelEditing(document_id: "YOUR_DOCUMENT_ID"); ``` Java ```java import boldsign.ApiClient; import boldsign.ApiException; import boldsign.Configuration; import boldsign.api.DocumentApi; ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); String documentId = "YOUR_DOCUMENT_ID"; String onBehalfOf = "sender@yourdomain.com"; DocumentApi documentApi = new DocumentApi(apiClient); documentApi.cancelEditing(documentId, onBehalfOf); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); await documentApi.cancelEditing("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The unique document id of the document. --- - {% arguments name="onBehalfOf" /%}{% batch datatype="string" /%} - The on behalf email address of the sender. {% /nestedtable %} ## Example response ***200 Success*** ```json Editing session canceled successfully. ``` --- # File: documents\change-access-code.md # Change access code {% patch /%} {% path text="/v1/document/changeAccessCode" /%} The sender can change the access code on an already authenticated document, and you must communicate with the recipient and pass on the code. ## Code snippet Use the following sample code snippet to change the access code for the signer who has already been authenticated. {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/changeAccessCode?documentId={documentId}&emailId=alexgayle@cubeflakes.com" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AccessCode\": \"123456\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.ChangeAccessCode("YOUR_DOCUMENT_ID", "david@cubeflakes.com", "123456"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_details = boldsign.AccessCodeDetails(accessCode="12345") document_api.change_access_code(document_id="YOUR_DOCUMENT_ID", access_code_details=access_code_details, email_id="david@cubeflakes.com") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $access_code_details = new AccessCodeDetails(); $access_code_details->setAccessCode('123456'); $document_api->changeAccessCode($document_id = 'YOUR_DOCUMENT_ID', $access_code_details, $email_id = 'david@cubeflakes.com'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); AccessCodeDetails accessCodeDetails = new AccessCodeDetails(); accessCodeDetails.setAccessCode("123456"); documentApi.changeAccessCode("YOUR_DOCUMENT_ID", accessCodeDetails, "alexgayle@cubeflakes.com", null); ``` NodeJS ```js import { DocumentApi, AccessCodeDetails } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const accessCodeDetails = new AccessCodeDetails(); accessCodeDetails.accessCode = "12345"; documentApi.changeAccessCode("YOUR_DOCUMENT_ID", accessCodeDetails, "alexgayle@cubeflakes.com"); ``` {% /codetab %} If a document contains a repeated signer with a signing order, in that case, the recipient's signing order can be specified along with the signer's email to change the access code, as shown in the following code snippet. {% codetab id="codetab2" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/changeAccessCode?documentId={documentId}&emailId=alexgayle@cubeflakes.com&zOrder=2" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"AccessCode\": \"123456\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.ChangeAccessCode("YOUR_DOCUMENT_ID", "david@cubeflakes.com", "123456", 1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) access_code_details = boldsign.AccessCodeDetails(accessCode="123456") document_api.change_access_code(document_id="YOUR_DOCUMENT_ID", access_code_details=access_code_details, email_id="david@cubeflakes.com", z_order=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $access_code_details = new AccessCodeDetails(); $access_code_details->setAccessCode('123456'); $document_api->changeAccessCode($document_id = 'YOUR_DOCUMENT_ID', $access_code_details, $email_id = 'david@cubeflakes.com', $z_order = 1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); AccessCodeDetails accessCodeDetails = new AccessCodeDetails(); accessCodeDetails.setAccessCode("123456"); documentApi.changeAccessCode("YOUR_DOCUMENT_ID", accessCodeDetails, "alexgayle@cubeflakes.com", 1); ``` NodeJS ```js import { AccessCodeDetails, DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const accessCodeDetails = new AccessCodeDetails(); accessCodeDetails.accessCode = "123456"; documentApi.changeAccessCode("YOUR_DOCUMENT_ID", accessCodeDetails, "alexgayle@cubeflakes.com", 1); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document. --- - {% arguments name="emailId" /%}{% batch datatype="string" /%}{% required /%} - Email address of the signer. --- - {% arguments name="zOrder" /%}{% batch datatype="Int" /%} - A number that denotes the signer's order, which targets the given email address present in the recipient list. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="AccessCode" /%}{% batch datatype="string" /%}{% required /%} - A set of alphanumeric characters will be specified by the sender that the recipient wants to change. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - If the document is created on behalf of the sender, the sender's identity email address must be specified. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: documents\delete-document.md # Delete document {% delete /%} {% path text="/v1/document/delete" /%} Delete the specific document, and it will be moved to the trash. After 30 days, the document will be permanently deleted from the BoldSign Application. ## Code snippet {% codetab %} cURL ```shell curl -X 'DELETE' \ 'https://api.boldsign.com/v1/document/delete?documentId=documentId&deletePermanently=false' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.DeleteDocument("YOUR_DOCUMENT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_api.delete_document(document_id="YOUR_DOCUMENT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_api->deleteDocument($document_id = 'YOUR_DOCUMENT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); documentApi.deleteDocument("YOUR_DOCUMENT_ID", null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); documentApi.deleteDocument("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The ID of an existing document. --- - {% arguments name="deletePermanently" /%}{% batch datatype="boolean" /%} - To permanently delete the document, you need to set this parameter to true. By default, the document is moved to the Trash, and the default value for this parameter is false. {% /nestedtable %} ## Example responses ***204 No Content*** --- # File: documents\delete-document-tags.md # Delete document tags {% delete /%} {% path text="/v1/document/deleteTags" /%} Each document has its own set of tags that can be used for searching the document. This API allows users to delete tags from the document that are no longer supported. ## Code snippet {% codetab %} cURL ```shell curl -X DELETE "https://api.boldsign.com/v1/document/deleteTags" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"DocumentId\": \"{documentId}\", \"Tags\": [\"test\", \"api\"]}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var deletetag = new DocumentTags() { DocumentId = "YOUR_DOCUMENT_ID", Tags = new List() { "test", "api" }, }; documentClient.DeleteTag(deletetag); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_tags = boldsign.DocumentTags( documentId="YOUR_DOCUMENT_ID", tags=["test", "api"]) document_api.delete_tag(document_tags) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_tags = new DocumentTags(); $document_tags->setDocumentId('YOUR_DOCUMENT_ID'); $document_tags->setTags(['test', 'api']); $document_api->deleteTag($document_tags); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); DocumentTags documentTags = new DocumentTags(); documentTags.setDocumentId("YOUR_DOCUMENT_ID"); documentTags.setTags(Arrays.asList("test", "api")); documentApi.deleteTag(documentTags); ``` NodeJS ```js import { DocumentApi, DocumentTags } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentTags = new DocumentTags(); documentTags.documentId = "YOUR_DOCUMENT_ID"; documentTags.tags = ["test","api"]; documentApi.deleteTag(documentTags); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="DocumentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document --- - {% arguments name="Tags" /%}{% batch datatype="string" /%}{% required /%} - A collection of tags that will be removed from the document. Each tag cannot exceed 255 characters and cannot contain white space. {% /nestedtable %} ## Example response ***200 Success*** --- # File: documents\document-details-and-status.md # Document details and status {% get /%} {% path text="/v1/document/properties" /%} The document's entire details, such as its current status, description, sender and signer details, added form fields, document history, etc., can be fetched by specifying the document ID. On successful get, the entire document's details will be returned. Particular document details can be accessed by the users involved in the document, the team admin, and the account admin. If any other user accesses the document, the unauthorized response will be returned. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/properties?documentId=8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var documentProperties = documentClient.GetProperties("YOUR_DOCUMENT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_properties = document_api.get_properties(document_id="YOUR_DOCUMENT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_properties = $document_api->getProperties($document_id = 'YOUR_DOCUMENT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); DocumentProperties documentProperties = documentApi.getProperties("YOUR_DOCUMENT_ID"); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentProperties = documentApi.getProperties("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the document, from which the details should be fetched. {% /nestedtable %} ## Example response ***200 Success*** ```json { "documentId": "8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c", "brandId": "6f4020a7-xxxx-xxxx-xxxx-ef071e143867", "messageTitle": "Agreement", "documentDescription": "", "status": "Completed", "files": [ { "id": "2f0df291-xxxx-xxxx-xxxx-97719d93c8b7", "documentName": "Agreement.png", "order": 0, "pageCount": 1, "templateName": "", "templateId": "" } ], "senderDetail": { "name": "Richard", "privateMessage": null, "emailAddress": "richard@cubeflakes.com", "isViewed": false }, "signerDetails": [ { "id": "1bd3cb81-xxx-xxx-xxx-856a113d610d", "signerName": "Alex Gayle", "signerRole": "", "signerEmail": "alexgayle@cubeflakes.com", "status": "Completed", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "IdVerification", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "allowFieldConfiguration": false, "idVerification": { "type": "EveryAccess", "maximumRetryCount": 3, "status": "Completed", "nameMatcher": "Strict", "requireLiveCapture": true, "requireMatchingSelfie": true, "holdForPrefill": false, "prefillCompleted": false, "allowedDocumentTypes": [ "Passport", "IDCard", "DriverLicense" ], "allowedCountries": [ "IN", "US", "CA", "AU" ] }, "formFields": [ { "id": "signature_NyLQ2", "formFieldId": "signature_NyLQ2", "type": "signature", "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAAB...", "font": "Helvetica", "isRequired": false, "isReadOnly": false, "lineHeight": 14, "fontSize": 12, "fontColor": "#000000", "isUnderline": false, "isItalic": false, "isBold": false, "groupName": "", "placeholder": "", "validationtype": "None", "validationCustomRegex": "", "validationCustomRegexMessage": "", "dateFormat": "", "imageInfo": null, "attachmentInfo": null, "fileInfo": null, "editableDateFieldSettings": null, "conditionalLogic": [], "hyperlinkText": "", "dropdownOptions": [], "bounds": { "x": 257.74194, "y": 109.870964, "width": 124, "height": 32 }, "pageNumber": 1, "dataSyncTag": "", "textAlign": "Left", "textDirection": "LTR", "characterSpacing": 0 } ], "language": 0, "locale": "EN", "recipientNotificationSettings": { "signatureRequest": true, "declined": true, "revoked": true, "signed": true, "completed": true, "expired": true, "reassigned": true, "deleted": true, "reminders": true, "editRecipient": true, "editDocument": true }, "authenticationRetryCount": null } ], "behalfOf": null, "ccDetails": [], "reminderSettings": { "enableAutoReminder": false, "reminderDays": 0, "reminderCount": 0 }, "reassign": [], "documentHistory": [ { "id": "833cdec4-xxxx-xxxx-xxxx-14a8ce1558a0", "name": "Alex Gayle", "email": "alexgayle@cubeflakes.com", "toName": "", "toEmail": "", "ipaddress": "49.37.215.213", "action": "Signed", "timestamp": 1663611441 }, { "id": "c6e21ecb-xxxx-xxxx-xxxx-17ce71d5794e", "name": "Alex Gayle", "email": "alexgayle@cubeflakes.com", "toName": "", "toEmail": "", "ipaddress": "49.37.215.213", "action": "Completed", "timestamp": 1663611441 } ], "activityBy": "richard@cubeflakes.com", "activityDate": 1663611440, "activityAction": "Viewed", "createdDate": 1663611440, "expiryDays": 60, "expiryDate": null, "enableSigningOrder": false, "isDeleted": false, "revokeMessage": "", "declineMessage": "", "applicationId": "", "labels": [], "disableEmails": false, "disableExpiryAlert": true, "hideDocumentId": false, "enablePrintAndSign": false, "enableReassign": true, "metaData": { "DocumentType": "NDA", "DocumentCategory": "Legal" }, "recipientNotificationSettings": { "signatureRequest": true, "declined": true, "revoked": true, "signed": true, "completed": true, "expired": true, "reassigned": true, "deleted": true, "reminders": true, "editRecipient": true, "editDocument": true, "viewed": false }, "scheduledSendTime": 1743294659, "groupSignerSettings": { "enabled": true, "allowedDirectories": [ "Group1" ] } } ``` --- # File: documents\download-audit-trail.md # Download audit trail {% get /%} {% path text="/v1/document/downloadAuditLog" /%} Returns the audit log for the completed document in PDF format for the specified document Id. This audit trail document will contain information about the different actions performed by the recipients with time stamp along with hash of the digitally signed document, which can be used to determine if the signed document is modified. When the document is created on behalf of a particular sender email, then the download audit trail operation can be performed on the same account by specifying the email in the `onBehalfOf.` ## Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/downloadAuditLog?documentId=949ebf20-45a8-4a3e-91a9-68e9540e0020' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp ApiClient apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); DocumentClient documentClient = new DocumentClient(apiClient); var documentStream = documentClient.DownloadAuditLog("YOUR_DOCUMENT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_stream = document_api.download_audit_log(document_id="YOUR_DOCUMENT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_stream = $document_api->downloadAuditLog($document_id = 'YOUR_DOCUMENT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); File documentStream = documentApi.downloadAuditLog("YOUR_DOCUMENT_ID", null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentStream = documentApi.downloadAuditLog("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The unique document id of the document. --- - {% arguments name="onBehalfOf" /%}{% batch datatype="string" /%} - The on behalf email address of the sender. {% /nestedtable %} ## Example response ***200 Success*** ```json Contains the audit PDF document ``` --- # File: documents\download-document.md # Download document {% get /%} {% path text="/v1/document/download" /%} Returns the PDF document for the specified documentId. When the document is created on behalf of a particular sender email, then the download operation can be performed on the same account by specifying the email in the `onBehalfOf.` ## Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/download?documentId=949ebf20-45a8-4a3e-91a9-68e9540e0020' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var documentStream = documentClient.DownloadDocument("YOUR_DOCUMENT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_stream = document_api.download_document(document_id="YOUR_DOCUMENT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_stream = $document_api->downloadDocument($document_id = 'YOUR_DOCUMENT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); File documentStream = documentApi.downloadDocument("YOUR_DOCUMENT_ID", null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentStream = documentApi.downloadDocument("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The unique document id of the document. --- - {% arguments name="onBehalfOf" /%}{% batch datatype="string" /%} - The on behalf email address of the sender. {% /nestedtable %} ## Example response ***200 Success*** ```json Contains the PDF document ``` --- # File: documents\edit-document.md # Edit Document {% put /%} {% path text="/v1/document/edit" /%} The Edit Document API allows users to modify the properties of an existing document and draft document. It facilitates updates to various properties such as the title, description, files, signers, and form fields associated with the document. ## Partial Update Users can execute partial updates to a document by specifying only the fields they intend to modify. The API will solely modify the provided fields, leaving the remainder unchanged. When you need to update a files, signers or its form fields, you need to provide `EditAction` such as `Add`, `Update`, or `Remove`. So, if you need to update or remove a file, signer or their form fields, you will need to provide the file ID, signer ID and form field ID, which you can retrieve using the Document Properties API that returns all properties of a given document. {% customlink href="/documents/document-details-and-status/" text="Read more about document properties API" /%} ## Asynchronous Document Processing This API operates in two different modes based on the input provided in the request body. If the input contains the files, the API will process the request asynchronously. If the input does not contain the files, the API will process the request synchronously. This will be represented in the response as `status` with the value `Queued` or `Completed`, respectively. The system will trigger either an `Edited` or `EditFailed` event, indicating the success or failure of the operation. In the event of failure, the system will send an `EditFailed` event along with an accompanying error message. It is imperative to address and resolve this error to ensure the proper operation in the next request. ## Code Snippet In the example request below, we are updating the document's description and a signer associated with the document, along with their form fields. {% codetab %} cURL ```shell curl -X PUT 'https://api.boldsign.com/v1/document/edit?documentId=2f0df291-xxxx-xxxx-xxxx-97719d93c8b7' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {API-KEY}' \ -d '{ "Message": "Please sign this document.", "Signers": [ { "EditAction": "Update", "Id": "4771b255-xxx-xxxx-xxxx-3819b11e4b3b", "AuthenticationType": "EmailOTP", "FormFields": [ { "EditAction": "Update", "Id": "signature_iYQVu", "FieldType": "Initial", "IsRequired": false }, { "EditAction": "Add", "FieldType": "TextBox", "Bounds": { "X": 100, "Y": 100, "Width": 100, "Height": 20 }, "IsRequired": false, "PageNumber": 1 } ] }, { "EditAction": "Add", "Name": "Signer", "EmailAddress": "signer@gmail.com", "AuthenticationType": "AccessCode", "AuthenticationCode": "1234", "FormFields": [ { "EditAction": "Add", "FieldType": "Signature", "Bounds": { "X": 150, "Y": 150, "Width": 200, "Height": 30 }, "IsRequired": true, "PageNumber": 1 } ] } ], "Labels": ["Label1", "Label2"], "ReminderSettings": { "EnableAutoReminder": true, "ReminderDays": 2, "ReminderCount": 4 }, "DocumentDownloadOption": "Individually" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var editDocumentRequest = new EditDocumentRequest() { DocumentId = "6f0cff9e-xxxx-xxxx-xxxx-a78e389964c2", Message = "Please sign this document.", Signers = new List() { new EditDocumentSigner() { EditAction = EditAction.Update, Id = "3ca6a81a-xxxx-xxxx-xxxx-f88e63f2ca6d", AuthenticationType = AuthenticationType.EmailOTP, FormFields = new List() { new EditFormField() { EditAction = EditAction.Update, Id = "signature_iYQVu", Type = FieldType.Initial, IsRequired = false, }, new EditFormField() { EditAction = EditAction.Add, Type = FieldType.TextBox, IsRequired = false, Bounds = new Rectangle() { X = 100, Y = 100, Width = 100, Height = 20, }, PageNumber = 1, }, }, }, new EditDocumentSigner() { EditAction = EditAction.Add, Name = "Signer", EmailAddress = "signer@gmail.com", AuthenticationType = AuthenticationType.AccessCode, AuthenticationCode = "1234", FormFields = new List() { new EditFormField() { EditAction = EditAction.Add, Type = FieldType.Signature, IsRequired = false, Bounds = new Rectangle() { X = 150, Y = 150, Width = 200, Height = 30, }, PageNumber = 1, }, }, }, }, Labels = new List() { "Label1", "Label2", }, ReminderSettings = new ReminderSettings() { EnableAutoReminder = true, ReminderCount = 4, ReminderDays = 2, }, }; documentClient.EditDocument(editDocumentRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_file = EditDocumentFile( edit_action="Add", file='tests/documents/agreement.pdf ) edit_request = EditDocumentRequest( files=[document_file], message="the message is updated" ) document_api.edit_document("YOUR_DOCUMENT_ID", edit_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\DocumentApi($config); $form_fields = new \BoldSign\Model\EditFormField(); $form_fields->setEditAction("Add"); $form_fields->setFieldType("Signature"); $form_fields->setPageNumber(1); $form_fields->setBounds(new \BoldSign\Model\Rectangle( [50, 50, 200, 25])); $signers = new BoldSign\Model\EditDocumentSigner(); $signers->setEditAction("Add"); $signers->setEmailAddress("signer@cubeflakes.com"); $signers->setName("Signer Name"); $signers->setFormFields([$form_fields]); $pdfFilePath = 'tests/data/agreement.pdf'; $document1 = new BoldSign\Model\EditDocumentFile(); $document1->setFile($pdfFilePath); $document1->setEditAction('Add'); $edit_document_request = new \BoldSign\Model\EditDocumentRequest(); $edit_document_request->setMessage('Updated docuemnt'); $edit_document_request->setSigners([$signers]); $edit_document_request->setFiles([$document1]); $edit_document_response = $apiInstance->editDocument("YOUR_DOCUMENT_ID", $edit_document_request); ``` Nodejs ```js import { DocumentApi, EditDocumentFile, EditDocumentRequest, EditDocumentSigner, EditFormField, Rectangle } from 'boldsign'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; const formField = new EditFormField(); formField.fieldType = EditFormField.FieldTypeEnum.Signature; formField.pageNumber = 1; formField.editAction = EditFormField.EditActionEnum.Add; formField.bounds = bounds; var signers = new EditDocumentSigner(); signers.editAction = EditDocumentSigner.EditActionEnum.Add, signers.emailAddress = "signer1@cubeflakes.com", signers.name = "signer1", signers.signerRole = "Signer"; signers.formFields = [formField]; var documentfile = new EditDocumentFile(); documentfile.file = fs.createReadStream("test/documents/agreement.pdf"); documentfile.editAction = EditDocumentFile.EditActionEnum.Add; var editDocumentRequest = new EditDocumentRequest(); editDocumentRequest.message = "Please review and sign the attached document."; editDocumentRequest.signers = [signers]; editDocumentRequest.files = [documentfile] documentApi.editDocument("YOUR_DOCUMENT_ID", editDocumentRequest); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(apiClient); Rectangle bounds = new Rectangle(); bounds.setX(50f); bounds.setY(100f); bounds.setWidth(100f); bounds.setHeight(60f); EditFormField formField = new EditFormField(); formField.setEditAction(EditFormField.EditActionEnum.ADD); formField.setFieldType(EditFormField.FieldTypeEnum.SIGNATURE); formField.setPageNumber(1); formField.setBounds(bounds); EditDocumentSigner signers = new EditDocumentSigner(); signers.setEmailAddress("signer@cubeflakes.com"); signers.setName("signername"); signers.setFormFields(Arrays.asList(formField)); signers.setEditAction(EditDocumentSigner.EditActionEnum.ADD); EditDocumentFile document1 = new EditDocumentFile(); document1.setEditAction(EditDocumentFile.EditActionEnum.ADD); File file = new File("test/documents/agreement.pdf"); document1.setFile(file); EditDocumentRequest editDocumentJsonRequest = new EditDocumentRequest(); editDocumentJsonRequest.setSigners(Arrays.asList(signers)); editDocumentJsonRequest.setMessage("Updated documments"); editDocumentJsonRequest.setFiles(Arrays.asList(document1)); DocumentEdited editDocumentResponse = documentApi.editDocument("YOUR_DOCUMENT_ID", editDocumentJsonRequest); ``` {% /codetab %} ## Request Body {% nestedtable %} - {% arguments name="Files" /%}{% batch datatype="array" /%} - Details of the files to be edited. One or more files can be specified. {% nestedtable %} - {% arguments name="EditAction" /%}{% batch datatype="string" /%}{% required /%} - This is used to specify the edit action to be performed on the file. They are `Add`, `Update`, and `Remove`. --- - {% arguments name="Id" /%}{% batch datatype="string" /%} - ID of the file. This ID used to identify and target the specific file to perform the edit action. **Note :** This is required only for `Update` and `Remove` actions. --- - {% arguments name="File" /%}{% batch datatype="FormFile" /%} - The file to be uploaded for sending signature request. `.pdf`, `.png`, `.jpg`, `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. For a single file with file name, the Base64 format should be: `{ "base64": "data:application/{{fileType}};base64,{{content}}", "fileName": "{{fileName}}" }`. **Note :** This is required only for `Add` and `Update` actions. --- - {% arguments name="FileUrl" /%}{% batch datatype="URI" /%} - The URL of the file must be publicly accessible. `.pdf`, `.png`, `.jpg`, `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. **Note :** This is required only for `Add` and `Update` actions. --- {% /nestedtable %} --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - This is the title of the document that will be displayed in the BoldSign user interface and in the signature request email. **Note :** `Title` can be edited only for draft documents. --- - {% arguments name="Message" /%}{% batch datatype="string" /%} - A message for all recipients. You can include instructions that the signer should know before signing the document. --- - {% arguments name="Signers" /%}{% batch datatype="array" /%} - Details of the signers to be edited. One or more signers can be specified. {% nestedtable %} - {% arguments name="EditAction" /%}{% batch datatype="string" /%}{% required /%} - This is used to specify the edit action to be performed on the signer. They are `Add`, `Update`, and `Remove`. --- - {% arguments name="Id" /%}{% batch datatype="string" /%} - ID of the signer. This ID used to identify and target the specific signer to perform the edit action. **Note :** This is required only for `Update` and `Remove` actions. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the signer. This name will appear on all emails, notifications, and the audit file. --- - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Email ID of the signer. This ID will appear on all emails, notifications, and the audit file. --- - {% arguments name="PrivateMessage" /%}{% batch datatype="string" /%} - A message that appears when the specified signer proceeds to sign the document. You can include instructions that the signer should know before signing the document. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="Nullable enum" /%} - This is used to allow authentication for a specific signer. We have four types of authentication: `AccessCode`, `EmailOTP`, `SMSOTP`, and `IdVerification`. The default value is `None`. --- - {% arguments name="AuthenticationCode" /%}{% batch datatype="string" /%} - The authentication access code that must be entered by the signer to access the document. This should be shared with the signer. --- - {% arguments name="EnableEmailOTP" /%}{% batch datatype="Nullable boolean" /%} - Enables email OTP authentication. If this is enabled, the signer must enter the OTP received in the email to access the document. --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When you set the authentication type to `SMSOTP` or select the delivery mode as `SMS`, `EmailAndSMS`, or `WhatsApp`, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature, after which they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. The maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable integer" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="DeliveryMode" /%}{% batch datatype="Nullable enum" /%} - This property allows you to specify the desired delivery mode for sending notifications. We have four types of delivery modes: `Email`, `SMS`, `WhatsApp`, and `EmailAndSMS`. The default value is `Email`. --- - {% arguments name="SignerOrder" /%}{% batch datatype="Nullable integer" /%} - Signing order of the signer. This is applicable when the signing order option is enabled. --- - {% arguments name="SignerType" /%}{% batch datatype="Nullable enum" /%} - Type of the signer. The values are `Signer`, `Reviewer`, and `InPersonSigner`. --- - {% arguments name="SignType" /%}{% batch datatype="Nullable enum" /%} - Specifies whether the recipient is an individual signer (`Single`) or a contact group signer (`Group`). If not specified, it defaults to `Single`. --- - {% arguments name="GroupId" /%}{% batch datatype="string" /%} - The identifier of the contact group to be used as the signer. You can obtain it from the Contact Groups API. --- - {% arguments name="HostEmail" /%}{% batch datatype="string" /%} - Email ID of the host. It is applicable when the `signerType` is set to `InPersonSigner`. --- - {% arguments name="SignerRole" /%}{% batch datatype="string" /%} - The role of the signer. --- - {% arguments name="AllowFieldConfiguration" /%}{% batch datatype="Nullable boolean" /%} - This option enables the signer to add fields at their end while signing the document. If this option is set to `false`, the signer cannot add fields, and they must complete the assigned ones. --- - {% arguments name="FormFields" /%}{% batch datatype="array" /%} - List of form fields associated with the signer that need to be edited. {% nestedtable %} - {% arguments name="EditAction" /%}{% batch datatype="string" /%}{% required /%} - This is used to specify the edit action to be performed on the form field. They are `Add`, `Update`, and `Remove`. --- - {% arguments name="Id" /%}{% batch datatype="string" /%} - The ID of the form field. ID must start with a letter or an underscore and can only contain letters, digits, and underscores. **Note :** This is required for `Update` and `Remove` actions. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the form field. --- - {% arguments name="Type" /%}{% batch datatype="Nullable enum" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, and `Dropdown`. The `Formula` field is only available in the beta version. **Note :** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex`. --- - {% arguments name="PageNumber" /%}{% batch datatype="Nullable integer" /%} - Page number in the document where the form field has to be placed. The page number must be greater than zero. **Note :** This is required for `Add` action. --- - {% arguments name="Bounds" /%}{% batch datatype="Rectangle" /%} - Position and size values of the form field to be placed. **Note :** This is required for `Add` action. {% nestedtable %} - {% arguments name="X" /%}{% batch datatype="float" /%} - X coordinate value to place the form field. --- - {% arguments name="Y" /%}{% batch datatype="float" /%} - Y coordinate value to place the form field. --- - {% arguments name="Width" /%}{% batch datatype="float" /%}{% required /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%}{% required /%} - Height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="IsRequired" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable integer" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Defaults to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="BackgroundHexColor" /%}{% batch datatype="string" /%} - Customize the label field background color. The value should be a hex color code. Example - `#FFFFFF`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="FontSize" /%}{% batch datatype="Nullable float" /%} - Size of the font. The default font size is **13.0**. --- - {% arguments name="Font" /%}{% batch datatype="Nullable enum" /%} - Font family. The values are `Courier`, ` Helvetica`, ` TimesNewRoman`, and ` NotoSans`. The default font family is ` Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="Nullable boolean" /%} - Decides whether the font should be bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="Nullable boolean" /%} - Decides whether the font should be italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="Nullable boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="Nullable integer" /%} - Height of a line in the text. The default line height is **15.0**. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="Nullable integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the type is set to `RadioButton`. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed on the text form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="Nullable enum" /%} - Type of validation for the text box form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email`, and `None`. The default validation type is `None`. --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex`. --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from your account's business profile settings. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from your account's business profile settings. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that are allowed to upload on the image form field. The values are `.jpg` or `.jpeg`, `.svg`, `.png`, and `.bmp`. {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that are allowed to upload on the attachment form field. The values are `PDF`, `Document`, and `Image`. {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate" /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the editable date form field. When `null` is provided, the value is set to `none`. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:10 PM) - `h:mm:ss tt` (2:45:20 PM) - `HH:mm:ss` (14:30:20) - `H:mm:ss` (9:15:10) - `None` (Disabled, no time will be displayed) {% /nestedtable %} --- - {% arguments name="ConditionalRules" /%}{% batch datatype="array" /%} - This is used to specify which fields should be visible based on the conditions provided. --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values that have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="IsReadOnly" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field is read-only or not. --- - {% arguments name="TextAlign" /%}{% batch datatype="Nullable enum" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center`, or `Right`. The default alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="Nullable enum" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="Nullable float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="Nullable integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the type is set to `RadioButton`. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed on the text form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="Nullable enum" /%} - Type of validation for the text box form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email`, and `None`. The default validation type is `None`. --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex`. --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box form field. --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string to define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determine the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="Nullable enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. --- - {% arguments name="AllowEditFormField" /%}{% batch datatype="Nullable boolean" /%} - This allows form fields to be edited while sending the document. --- - {% arguments name="AllowDeleteFormField" /%}{% batch datatype="Nullable boolean" /%} - This allows form fields to be deleted while sending the document. {% /nestedtable %} --- - {% arguments name="Language" /%}{% batch datatype="Nullable integer" /%} - Index of the language in which the document signing pages and emails for the signer should render. The supported languages are `1-English`, `2-Spanish`, `3-German`, `4-French`, and `5-Romanian`. Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. --- - {% arguments name="Locale" /%}{% batch datatype="Nullable enum" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`, `ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`, `IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`, `RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English`. --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients by configuring the properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is signed by another recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is edited. {% /nestedtable %} --- - {% arguments name="EnableQes" /%}{% batch datatype="Nullable boolean" /%} - When set to true, the signer will be allowed to sign the document with a qualified electronic signature (QES). It can only be assigned to a single signer. When there are multiple signers in a document, the signer order option should be enabled to ensure only the last person in the document is enabled with QES, and the last signer order also should not have multiple signers. --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} --- - {% arguments name="CC" /%}{% batch datatype="array" /%} - Email IDs of the CC recipients. One or more CC recipients can be specified. {% nestedtable %} - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Email ID of the CC recipients. {% /nestedtable %} --- - {% arguments name="EnableSigningOrder" /%}{% batch datatype="Nullable boolean " /%} - Enables or disables the signing order. If this is enabled, then the signers can sign the document in the specified order and will not be able to sign in parallel. The default value is `false`. **Note :** `EnableSigningOrder` can be enabled or disabled only for draft documents. --- - {% arguments name="ExpiryDateType" /%}{% batch datatype="Nullable enum" /%} - This specifies the type of expiry date for the document. They are `Days`, `Hours`, and `SpecificDateTime`. The default value is `Days`. --- - {% arguments name="ExpiryValue" /%}{% batch datatype="Nullable long" /%} - This specifies the expiry value for the document based on the `ExpiryDateType` selected. The default value is `60` days. --- - {% arguments name="ReminderSettings.EnableAutoReminder" /%}{% batch datatype="boolean" /%} - Enables or disables the auto reminder. --- - {% arguments name="ReminderSettings.ReminderDays" /%}{% batch datatype="integer" /%} - The number of days between each automatic reminder. --- - {% arguments name="ReminderSettings.ReminderCount" /%}{% batch datatype="integer" /%} - The number of times the auto reminder should be sent. --- - {% arguments name="DisableEmails" /%}{% batch datatype="Nullable boolean" /%} - Disables the sending of document-related emails to all recipients. The default value is `false`. --- - {% arguments name="DisableSMS" /%}{% batch datatype="Nullable boolean" /%} - Disables the sending of document-related SMS to all recipients. The default value is `false`. --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - You can customize the logo, colors, and other elements of the signature request emails and document signing pages to match your company branding. The ID of the existing brand can be obtained from the branding API and from the web app. **Note :** `BrandId` can be edited only for draft documents. --- - {% arguments name="HideDocumentId" /%}{% batch datatype="Nullable boolean" /%} - Decides whether the document ID should be hidden or not. --- - {% arguments name="Labels" /%}{% batch datatype="array" /%} - Labels (tags) are added to the document to categorize and filter the documents. One or more labels can be added. Labels cannot contain whitespaces and must not exceed 255 characters. --- - {% arguments name="UseTextTags" /%}{% batch datatype="boolean" /%} - When enabled, it will convert all the tags defined in the document to BoldSign form fields. The default value is `false`. --- - {% arguments name="TextTagDefinitions" /%}{% batch datatype="array" /%} - This can be used for long text tag handling. {% nestedtable %} - {% arguments name="DefinitionId" /%}{% batch datatype="string" /%} - The definition ID of the text tag. --- - {% arguments name="Type" /%}{% batch datatype="Type" /%} - The type of the form field. --- - {% arguments name="SignerIndex" /%}{% batch datatype="integer" /%} - The signer index of the form field. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - When disabled, the signer is not required to fill out the specific form field. The default value is `true`. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - The placeholder of the form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Defaults to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="FieldId" /%}{% batch datatype="string" /%} - The field ID of the form field. --- - {% arguments name="Font" /%}{% batch datatype="object" /%} - The font of the form field. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="FontFamily" /%} - Font family. The values are `Courier`, ` Helvetica`, and ` TimesNewRoman`. The default font family is ` Helvetica`. --- - {% arguments name="Color" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="Size" /%}{% batch datatype="Nullable float" /%} - Size of the font. --- - {% arguments name="Style" /%}{% batch datatype="FontStyle" /%} - Style of the font. The values are `Regular`, `Bold`, `Italic`, and `Underline`. The default font style is `Regular`. --- - {% arguments name="LineHeight" /%}{% batch datatype="Nullable int" /%} - Height of a line in the text. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. {% /nestedtable %} --- - {% arguments name="Validation" /%}{% batch datatype="object" /%} - When the type is selected as `TextBox`, validation of the form field is required. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - The validation type of the text box form field. The available values are `None`, `NumbersOnly`, `EmailAddress`, `Currency`, and `CustomRegex`. The default value is `None`. --- - {% arguments name="Regex" /%}{% batch datatype="string" /%} - The custom regex of the text box form field. When `ValidationType` is set to `CustomRegex`, this will be required. --- - {% arguments name="RegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box field. {% /nestedtable %} --- - {% arguments name="Size" /%}{% batch datatype="object" /%} - This can be used to specify the form field's height and width. {% nestedtable %} - {% arguments name="Width" /%}{% batch datatype="float" /%} - The width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - The height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from your account's business profile settings. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from your account's business profile settings. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `None` (Disabled, no time will be displayed) --- - {% arguments name="RadioGroupName" /%}{% batch datatype="string" /%} - The form field's group name, which is required when the type is set as `RadioButton`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - The value of the form field. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The options of the dropdown form field. --- - {% arguments name="OffSet" /%}{% batch datatype="object" /%} - Specifies the offset positioning for the text tag, allowing adjustments to its location relative to the computed position. The computed value after adjustment must remain within the page dimensions. {% nestedtable %} - {% arguments name="OffSetX" /%}{% batch datatype="double" /%} - Adjusts the text tag's position horizontally (left or right). The default value is **0.0**. --- - {% arguments name="OffSetY" /%}{% batch datatype="double" /%} - Adjusts the text tag's position vertically (top or bottom). The default value is **0.0**. {% /nestedtable %} --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string to define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determine the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox fields to sync them. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center`, or `Right`. The default alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. {% /nestedtable %} --- - {% arguments name="EnablePrintAndSign" /%}{% batch datatype="Nullable boolean" /%} - Allows the signer to print and sign the document. The default value is `false`. --- - {% arguments name="EnableReassign" /%}{% batch datatype="Nullable boolean" /%} - Allows the signer to reassign the signature request to another person. The default value is `true`. --- - {% arguments name="DisableExpiryAlert" /%}{% batch datatype="Nullable boolean" /%} - Disables the alert that will be sent one day before the document's expiry. --- - {% arguments name="DocumentInfo" /%}{% batch datatype="array" /%} - Options to customize the information, such as the title and description of the document for a particular signer. {% nestedtable %} - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English`, `2-Spanish`, `3-German`, `4-French`, and `5-Romanian`. Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English`. --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the document. **Note :** `Title` can be edited only for draft documents. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - A message for the signer. You can include instructions that the signer should know before signing the document. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`, `ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`, `IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`, `RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English`. {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Email ID of the user to send the document on behalf of them. --- - {% arguments name="DocumentDownloadOption" /%}{% batch datatype="Nullable enum" /%} - This option allows you to configure how the uploaded files, especially multiple files, should be downloaded: as a single combined document, as separate documents, or based on the user preference. The values are `Combined`, `Individually`, and `UserPreference`. The default value is `Combined`. If the value is `null`, the setting configured in the business profile settings will be considered. --- - {% arguments name="FormGroups" /%}{% batch datatype="array" /%} - Manages the rules and configuration of grouped form fields. {% nestedtable %} - {% arguments name="MinimumCount" /%}{% batch datatype="integer" /%} - The minimum number of items that must be selected in a form group. The minimum count value must be greater than zero. --- - {% arguments name="MaximumCount" /%}{% batch datatype="integer" /%} - The maximum number of items that must be selected in a form group. The maximum count value must be greater than zero. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The data sync tag of the form group. --- - {% arguments name="GroupNames" /%}{% batch datatype="array" /%} - The group names to which this form group rule should be applied. --- - {% arguments name="GroupValidation" /%}{% batch datatype="string" /%} - Specify the form group validation type. The available validations are `Minimum`, `Maximum`, `Absolute`, and `Range`. {% /nestedtable %} --- - {% arguments name="MetaData" /%}{% batch datatype="dictionary" /%} - Additional information about the document in the form of key-value pairs. Up to 50 key-value pairs can be added. The key is limited to 50 characters, and the value is limited to 500 characters. --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients or CC collectively by configuring properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is signed by another recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is edited. --- - {% arguments name="Viewed" /%}{% batch datatype="boolean" /%} - Indicates whether the CC should be notified when the document is viewed. {% /nestedtable %} --- - {% arguments name="EnableAuditTrailLocalization" /%}{% batch datatype="Nullable boolean" /%} - Enable localization for the audit trail based on the signer's language. If `null` is provided, the value will be inherited from the Business Profile settings. Only one additional language can be specified in the signer's languages besides English. --- - {% arguments name="DownloadFileName" /%}{% batch datatype="string" /%} - Defines the custom format for the file name of downloaded document files. You can combine your own file name elements with the following predefined dynamic variables: - `title` - `documentId` - `signername` - `signername_last` - `signername_order#1` - `sendername` - `completeddate` - `status` The `#1` in `signername_order#1` serves as a placeholder and should be replaced with an actual value, such as `signername_order#3`, to represent a 3rd signer's name. The maximum file name length is 250 characters. If the generated name exceeds this limit, it will be truncated to fit within the limit. This property is optional; if not provided, the default format configured in the business profile will be used. --- - {% arguments name="allowedSignatureTypes" /%}{% batch datatype="array" /%} - Defines the signature input options available to the signer during the signing process. This property customizes the signature and initial field dialog by controlling which signature input methods are shown to the signer. The available signature types are: `Text`, `Draw`, and `Image`. --- - {% arguments name="ScheduledSendTime" /%}{% batch datatype="Nullable long" /%} - This property is used to schedule the document for sending at a later time. The value should be a Unix timestamp representing the desired send time. If `null` is provided, the document will be sent immediately. **Note :** `ScheduledSendTime` can be edited only for draft documents. --- - {% arguments name="EnableAllowSignEverywhere" /%}{% batch datatype="Nullable boolean" /%} - This property allows you to define whether all signature form fields on the signing page should use the same signature value applied by the signer. If this property is not specified, the signature values will be inherited from the business profile configuration. --- - {% arguments name="GroupSignerSettings" /%}{% batch datatype="object" /%} - Configures whether contact groups can be used as signers for this document, and restricts which contact groups are allowed. {% nestedtable %} - {% arguments name="Enabled" /%}{% batch datatype="boolean" /%} - When set to `true`, contact groups can be used as signers. --- - {% arguments name="AllowedDirectories" /%}{% batch datatype="array" /%} - The list of allowed directory values. Only contact groups assigned to one of these directories can be used as signers. {% /nestedtable %} {% /nestedtable %} **Note**s 1. Please note that you must use either the `fileUrls` or `files` parameter in a request, both cannot be used together. 2. For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP Limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ## Example Response **_Request without files_** ```json { "status": "Completed" } ``` **_Request with files_** ```json { "status": "Queued" } ``` --- # File: documents\embedded-cloned-document.md # Embedded cloned document The embedded cloned document link allows users to prepare the cloned documents on your website or mobile app using an iFrame, popup window, or a new tab. ## Clone Document Creating the new document with existing document data but It is organized under new document id. The Clone document API allows users to clone the existing document into new document. The form fields can be includeded in the document by enabling true in `WithFormFieldValues`.This API also create embedded link for that newly cloned document. ## Get embedded cloned document link {% post /%} {% path text="/v1/document/cloneDocument" /%} The get embedded cloned document link has additional properties to customize the embedded process. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/cloneDocument?documentId=be5cbb00-xxxx-xxxx-xxxx-bafa580exxxx' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ViewOption=PreparePage' \ -F 'ShowSaveButton=true' \ -F 'ShowCreateButton=true' \ -F 'ShowPreviewButton=true' \ -F 'ShowNavigationButtons=true' \ -F 'EmbeddedSendLinkValidTill=DateTime.Now.AddDays(1)' \ -F 'WithFormFieldValues=true' \ -F 'Locale=EN' \ -F 'ShowToolbar=false' \ -F 'ShowTooltip=false' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var embeddedCloneDocumentRequest = new EmbeddedCloneDocumentRequest() { DocumentId = "YOUR_DOCUMENT_ID", ViewOption = PageViewOption.PreparePage, ShowSaveButton = true, ShowPreviewButton = true, ShowNavigationButtons = true, EmbeddedSendLinkValidTill = DateTime.Now.AddDays(1), WithFormFieldValues = true, Locale = Locales.EN, ShowCreateButton = true, ShowToolbar = false, ShowTooltip = false, }; var embeddedClonedDocument = documentClient.GetEmbeddedClonedDocumentUrl(embeddedCloneDocumentRequest); var documentEmbedUrl = embeddedClonedDocument.embedUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(host="https://api.boldsign.com", api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) embedded_clone_document_request = boldsign.EmbeddedCloneDocumentRequest( ViewOption = "PreparePage", ShowSaveButton = true, ShowPreviewButton = true, ShowNavigationButtons = true, WithFormFieldValues = true, Locale = "EN", ShowCreateButton = true, ShowToolbar = false, ShowTooltip = false) embedded_cloned_document = document_api.get_embedded_cloned_document_url(document_id= "YOUR_DOCUMENT_ID", embedded_cloned_document_request=embedded_cloned_document_request) ``` PHP ```php setHost('https://api.boldsign.com'); $config->setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $embedded_clone_document_request = new EmbeddedCloneDocumentRequest(); $embedded_clone_document_request->setShowToolbar(true); $embedded_clone_document_request->setShowTooltip(true); $embedded_clone_document_request->setShowSaveButton(true); $embedded_clone_document_request->setShowPreviewButton(false); $embedded_clone_document_request->setViewOption('PreparePage'); $embedded_clone_document_request->setWithFormFieldValues(true); $embedded_clone_document_request->setShowNavigationButtons(true); $embedded_cloned_document = $document_api->getEmbeddedClonedDocumentUrl($document_id = 'YOUR_DOCUMENT_ID', $embedded_clone_document_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setBasePath("https://api.boldsign.com"); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); EmbeddedCloneDocumentRequest embeddedCloneDocumentRequest = new EmbeddedCloneDocumentRequest(); embeddedCloneDocumentRequest.setShowToolbar(true); embeddedCloneDocumentRequest.setShowTooltip(true); embeddedCloneDocumentRequest.setShowSaveButton(true); embeddedCloneDocumentRequest.setShowPreviewButton(false); embeddedCloneDocumentRequest.setViewOption(embeddedCloneDocumentRequest.ViewOptionEnum.PREPARE_PAGE); embeddedCloneDocumentRequest.setWithFormFieldValues(true); embeddedCloneDocumentRequest.setShowNavigationButtons(true); EmbeddedClonedDocument embeddedClonedDocument = documentApi.getEmbeddedClonedDocumentUrl("YOUR_DOCUMENT_ID", embeddedCloneDocumentRequest); ``` NodeJS ```js import { documentApi, EmbeddedCloneDocumentRequest } from "boldsign"; const baseUrl:string = "https://api.boldsign.com"; const documentApi = new documentApi(baseUrl); documentApi.setApiKey("YOUR_API_KEY"); const embeddedCloneDocumentRequest = new EmbeddedCloneDocumentRequest(); embeddedCloneDocumentRequest.showToolbar = true; embeddedCloneDocumentRequest.showTooltip = true; embeddedCloneDocumentRequest.showSaveButton = true; embeddedCloneDocumentRequest.showPreviewButton = false; embeddedCloneDocumentRequest.viewOption = embeddedCloneDocumentRequest.ViewOptionEnum.PreparePage; embeddedCloneDocumentRequest.withFormFieldValues = true; embeddedCloneDocumentRequest.showNavigationButtons = true; const embeddedClonedDocument = documentApi.getEmbeddedClonedDocumentUrl("YOUR_DOCUMENT_ID", embeddedCloneDocumentRequest); ``` {% /codetab %} ### Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the document to clone. {% /nestedtable %} ### Request body {% nestedtable %} - {% arguments name="RedirectURL" /%}{% batch datatype="string" /%} - The redirect URI is to be redirected after the clone document process is completed. The string should be in URI format. --- - {% arguments name="ViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize roles, enforce authentication etc. The PreparePage is used to configure form fields for the roles. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop down menu. Set to false if you don't want your users to save the document. Defaults to true. --- - {% arguments name="ShowCreateButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save document` button at the top right corner of the page. Set to false if you don't want your users to save the document. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drown down menu. Set to false if you don't want your users to preview the document before finalizing it. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="EmbeddedSendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="WithFormFieldValues" /%}{% batch datatype="boolean" /%} - This property specifies whether form field values should be included when cloning the document. If set to true, the cloned document will contain the form field data; if set to false, the form fields will be excluded. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded cloned document link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), and SV(Swedish) --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - The email address of the user that was used to create the document on their behalf. {% /nestedtable %} ### Example response ```json { "documentId": "7a18c3y10...", "embedUrl": "https://app.boldsign.com/document/embed/?documentId=7a18c3y10..." } ``` --- # File: documents\extend-document-expiry.md # Extend document expiry {% patch /%} {% path text="/v1/document/extendExpiry" /%} The sender and its admin can only extend the expiration date of a document. Additionally, you can also notify the recipient one day prior to the expiry date. You cannot perform this action to reduce the expiry date of a document, and this action can only be performed on documents that have not been signed yet. ## Code snippet {% codetab %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/extendExpiry?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"NewExpiryValue\": \"2022-12-15\", \"WarnPrior\": true}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.ExtendExpiry("YOUR_DOCUMENT_ID", "YOUR_EXPIRY_DATE"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) extend_expiry = boldsign.ExtendExpiry(newExpiryValue="YOUR_EXPIRY_DATE") document_api.extend_expiry(document_id="YOUR_DOCUMENT_ID", extend_expiry=extend_expiry) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $extend_expiry = new ExtendExpiry(); $extend_expiry->setNewExpiryValue('YOUR_EXPIRY_DATE'); $document_api->extendExpiry($document_id = 'YOUR_DOCUMENT_ID', $extend_expiry); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); ExtendExpiry extendExpiry = new ExtendExpiry(); extendExpiry.setNewExpiryValue("YOUR_EXPIRY_DATE"); documentApi.extendExpiry("YOUR_DOCUMENT_ID", extendExpiry); ``` NodeJS ```js import { DocumentApi, ExtendExpiry } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const extendExpiry = new ExtendExpiry(); extendExpiry.newExpiryValue = "YOUR_EXPIRY_DATE"; documentApi.extendExpiry("YOUR_DOCUMENT_ID", extendExpiry); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="NewExpiryValue" /%}{% batch datatype="string($date)" /%}{% required /%} - New expiry date of the document. The expiration date must not exceed 180 days from the document creation date. If the document’s default expiry date type is specified as **Days,** set the new extended expiry value in yyyy-MM-dd format (‘2022-12-15’). If the document’s default expiry date type is specified as **Hours,** set the new extended expiry value in integer format (‘12’). If the document’s default expiry date type is specified as **Specific Date and Time,** set the new extended expiry value in ISO date time format (‘2022-12-15T10:58:04.863Z’). --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - If the document is created on behalf of the sender, the sender's identity email address must be specified. --- - {% arguments name="WarnPrior" /%}{% batch datatype="Boolean" /%} - If the value is null, the existing document configuration will be used. If the value is true, a signing notification mail will be sent one day before the expiration date. If the value is false, one day before signing notification mail will not be sent. {% /nestedtable %} ## Example response ***200 Success*** --- # File: documents\list-documents.md # List documents {% get /%} {% path text="/v1/document/list" /%} The list of documents that are available in your `My Documents` section can be fetched. The documents can be fetched based on their status, sender, recipient, labels, document details, etc. You can also limit the maximum number of documents to be fetched and their position. After the successful get, the entire details of all the queried documents will be displayed. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/list?pageSize=10&page=1&sentBy=string' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var documentList = documentClient.ListDocuments(1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_list = document_api.list_documents(page=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_list = $document_api->listDocuments($page=1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); int page=1; DocumentRecords documentList = documentApi.listDocuments(page, null, null, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentList = documentApi.listDocuments(1); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="pageSize" /%}{% batch datatype="integer" /%} - The maximum number of team documents to be listed on a page. Defaults to `10.` --- - {% arguments name="page" /%}{% batch datatype="integer" /%}{% required /%} - The page number that you would like to view. Defaults to `1.` --- - {% arguments name="sentBy" /%}{% batch datatype="array" /%} - Mail ID of the sender. One or more ID's can be specified. --- - {% arguments name="recipients" /%}{% batch datatype="array" /%} - Mail ID of the signer. One or more ID's can be specified. --- - {% arguments name="startDate" /%}{% batch datatype="string" /%} - Start transmit date range of the document. The string should be in date-time format. --- - {% arguments name="status" /%}{% batch datatype="array" /%} - Current status of the document. You can set `None` if you don't want to filter based on the document status. Other values are `WaitingForMe,` `WaitingForOthers,` `NeedAttention,` `Completed,` `Declined,` `Revoked,` `Expired,` `Scheduled,` and `Draft.` --- - {% arguments name="endDate" /%}{% batch datatype="string" /%} - End transmit date range of the document. The string should be in date-time format. --- - {% arguments name="searchKey" /%}{% batch datatype="string" /%} - Query based on the details of the documents like document title, document ID, sender or recipient(s) name, etc. --- - {% arguments name="labels" /%}{% batch datatype="array" /%} - Labels (tags) specified in the document. --- - {% arguments name="transmitType" /%}{% batch datatype="string" /%} - Type of transmission such as `Sent,` `Received,` and `Both.` --- - {% arguments name="nextCursor" /%}{% batch datatype="int" /%} - To facilitate pagination and fetch the next set of documents beyond 10,000 records, it is necessary to set the `nextCursor` value. This should be the `cursor` value of the last document retrieved. e.g:nextCursor: 1689815402493 --- - {% arguments name="brandIds" /%}{% batch datatype="array" /%} - Filters documents based on their associated brand IDs. --- - {% arguments name="dateFilterType" /%}{% batch datatype="string" /%} - Type of date filter such as `SentBetween`, and `Expiring`. {% /nestedtable %} ## Example response ***200 Success*** ```json { "pageDetails": { "pageSize": 10, "page": 1, "totalRecordsCount": 28, "totalPages": 3, "sortedColumn": "activityDate", "sortDirection": "DESC" }, "result": [ { "documentId": "755195d8-xxxx-xxxx-xxxx-88ff77d35419", "senderDetail": { "name": "Richard", "privateMessage": null, "emailAddress": "richard@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false } ], "createdDate": 1664961706, "activityDate": 1665989290, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "565", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": true, "privateMessage": "", "formFields": [], "language": 0 } ], "expiryDate": 1670178599, "enableSigningOrder": false, "isDeleted": false, "labels": [], "nextCursor": 1665989290, "scheduledSendTime": 1743294659 }, { "documentId": "655195d8-xxxx-xxxx-xxxx-88ff77d35531", "senderDetail": { "name": "Alex Gayle", "privateMessage": null, "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "richard@cubeflakes.com", "isViewed": false } ], "createdDate": 1665988967, "activityDate": 1665988967, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "Agreement", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "richard@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0 }, { "signerName": "Alex Gayle", "signerRole": "", "signerEmail": "alexgayle@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "IdVerification", "isDeliveryFailed": false, "isViewed": false, "order": 2, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0, "idVerification": { "type": "EveryAccess", "maximumRetryCount": 3, "status": "Completed", "nameMatcher": "Strict", "requireLiveCapture": true, "requireMatchingSelfie": true, "holdForPrefill": false, "prefillCompleted": false, "allowedDocumentTypes": [ "Passport", "IDCard", "DriverLicense" ], "allowedCountries": [ "IN", "US", "CA", "AU" ] } } ], "expiryDate": 1671820199, "enableSigningOrder": false, "isDeleted": false, "labels": [ "Agreement" ], "nextCursor": 1689815402493, "scheduledSendTime": 1743294659 } ] } ``` --- # File: documents\list-team-documents.md # List team documents {% get /%} {% path text="/v1/document/teamlist" /%} The team admin can view all the documents that are sent and received by the team members. In contrast, the account admin can view all the documents that are sent and received by all the team members. These documents are available in the `Team Documents` section in the BoldSign application. For more informtaion, please refer to the {% customlink href="/teams/create-team/" text="Create team" /%} article. The team documents can be fetched based on their status, user id, team id, document details, etc. You can also limit the number of documents to be fetched and their position. After a successful retrieval, the details of all the queried documents will be returned. If the user is not an account admin or team admin, then the unauthorized response will be returned. ## Code snippet {% codetab %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/teamlist?status=WaitingForOthers&userId=&pageSize=10&page=1&transmitType=%20Both' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var teamDocumentRecords = documentClient.ListTeamDocuments(1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) team_document_records = document_api.team_documents(page=1) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $team_document_records = $document_api->teamDocuments($page=1); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); int page=1; TeamDocumentRecords teamDocumentRecords = documentApi.teamDocuments(page, null, null, null, null, null, null, null, null, null, null, null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const teamDocumentRecords = documentApi.teamDocuments(1); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="status" /%}{% batch datatype="array" /%} - Current status of the team document. You can set `None` if you don't want to filter based on the document status. Other values are `WaitingForMe,` `WaitingForOthers,` `NeedAttention,` `Completed,` `Declined,` `Revoked,` `Expired,` and `Draft.` --- - {% arguments name="userId" /%}{% batch datatype="array" /%} - ID of the user in the team. One or more user IDs can be specified. --- - {% arguments name="teamId" /%}{% batch datatype="array" /%} - ID of the team. One or more team IDs can be specified. --- - {% arguments name="searchKey" /%}{% batch datatype="string" /%} - Query based on the details of the documents like document title, document ID, sender or recipient(s) name, etc. --- - {% arguments name="pageSize" /%}{% batch datatype="integer" /%} - The maximum number of team documents to be listed on a page. Defaults to `10.` --- - {% arguments name="page" /%}{% batch datatype="integer" /%}{% required /%} - The page number that you would like to view. Defaults to `1.` --- - {% arguments name="endDate" /%}{% batch datatype="string" /%} - End transmit date range of the document. The string should be in date-time format. --- - {% arguments name="startDate" /%}{% batch datatype="string" /%} - Start transmit date range of the document. The string should be in date-time format. --- - {% arguments name="labels" /%}{% batch datatype="array" /%} - Labels (tags) specified in the document. --- - {% arguments name="transmitType" /%}{% batch datatype="string" /%} - Type of transmission such as `Sent,` `Received,` and `Both.` --- - {% arguments name="nextCursor" /%}{% batch datatype="int" /%} - To facilitate pagination and fetch the next set of documents beyond 10,000 records, it is necessary to set the `nextCursor` value. This should be the `cursor` value of the last document retrieved. e.g:nextCursor: 1689815402493 --- - {% arguments name="brandIds" /%}{% batch datatype="array" /%} - Filters documents based on their associated brand IDs. --- - {% arguments name="dateFilterType" /%}{% batch datatype="string" /%} - Type of date filter such as `SentBetween`, and `Expiring`. {% /nestedtable %} ## Example response ***200 Success*** ```json { "pageDetails": { "pageSize": 10, "page": 1, "totalRecordsCount": 28, "totalPages": 3, "sortedColumn": "activityDate", "sortDirection": "DESC" }, "result": [ { "documentId": "755195d8-xxxx-xxxx-xxxx-88ff77d35419", "senderDetail": { "name": "Richard", "privateMessage": null, "emailAddress": "richard@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false } ], "createdDate": 1664961706, "activityDate": 1665989290, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "565", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": true, "privateMessage": "", "formFields": [], "language": 0 } ], "expiryDate": 1670178599, "enableSigningOrder": false, "isDeleted": false, "labels": [], "nextCursor": 1665989290 }, { "documentId": "655195d8-xxxx-xxxx-xxxx-88ff77d35531", "senderDetail": { "name": "Alex Gayle", "privateMessage": null, "emailAddress": "alexgayle@cubeflakes.com", "isViewed": false }, "ccDetails": [ { "emailAddress": "richard@cubeflakes.com", "isViewed": false } ], "createdDate": 1665988967, "activityDate": 1665988967, "activityBy": "alexgayle@cubeflakes.com", "messageTitle": "Agreement", "status": "InProgress", "signerDetails": [ { "signerName": "Richard", "signerRole": "", "signerEmail": "richard@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 1, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0 }, { "signerName": "Alex Gayle", "signerRole": "", "signerEmail": "alexgayle@cubeflakes.com", "status": "NotCompleted", "enableAccessCode": false, "isAuthenticationFailed": null, "enableEmailOTP": false, "authenticationType": "None", "isDeliveryFailed": false, "isViewed": false, "order": 2, "signerType": "Signer", "signType": "Single", "groupId": "", "hostEmail": "", "hostName": "", "isReassigned": false, "privateMessage": "", "formFields": [], "language": 0 } ], "expiryDate": 1671820199, "enableSigningOrder": false, "isDeleted": false, "labels": [ "Agreement" ], "nextCursor": 1689815402493 } ] } ``` --- # File: documents\prefill-form-fields.md # Prefill form fields {% patch /%} {% path text="/v1/document/prefillFields" /%} Prefill form fields is a feature that allows you to assign values to the form fields in the document before or after sending it to the signers. You can prefill the form fields with the data collected from the signer or from any other source. However, it's important to note that prefilling form fields is not allowed after the document has been signed by the signer. ## Supported field types The following field types are supported for prefilling: - Textbox - Checkbox - Radio buttons - Editable date - Dropdown - Image ## Unsupported field types The following field types are not supported for prefilling: - Name - Email - Signature - Initial - DateSigned - Attachment - Hyperlink - Title - Company - Label - Drawing ## DataSync The prefill fields feature also supports the `DataSyncTag`. If the form field has a `DataSyncTag`, then the value applied to the targeted field will also be applied to other form fields with the same `DataSyncTag` value and the same form field type. ## Limitations - Unsupported fields cannot be prefilled. - The signer related to the form field should not have already signed the document. - Revoked, declined, expired or other invalid status documents cannot be prefilled. Only in-progress documents can be prefilled. ## Prerequisite To prefill a form field, you need to know its `id`. This identifier allows you to target the specific field and assign a value. There are two methods to obtain the `id`: 1. **Assign Custom IDs When Sending a Document** When you send a document for signing, you can assign custom `id` values to form fields. This approach allows you to predetermine the `id` of fields you may want to prefill later. 2. **Retrieve Auto-generated IDs Using the API** If you haven't assigned custom IDs, you can use the `/v1/document/properties` API to retrieve the entire document details, including auto-generated `id` values for all form fields. {% customlink href="/documents/document-details-and-status/" text="Learn more about the document properties API" /%} Custom IDs provide more control and predictability when prefilling fields. Auto-generated IDs can be used when working with existing documents or when custom IDs weren't assigned. ## Textbox Prefilling a textbox form field is a straightforward process. You need to provide the `id` of the form field and the `value` you want to assign to it. {% codetab %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "textbox_mShRr", "Value": "Prefill value" } ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "textbox_mShRr", Value = "Prefill value" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="textbox_mShRr", value="Prefill value") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('textbox_mShRr'); $prefill_field->setValue('Prefill value'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("textbox_mShRr"); prefillField.setValue("Prefill value"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "TextBox1"; prefillField.value = "Prefill Value"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Checkbox To prefill a checkbox form field, you will need to provide the `id` of the form field and its `value`. The `id` must match exactly with the checkbox's `id` in your document, while the `value` should be either `"ON"` (to check the box) or `"OFF"` (to uncheck it). {% codetab id="codetab2" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "checkbox_b5yuo", "Value": "ON" } ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "checkbox_b5yuo", Value = "ON" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="checkbox_b5yuo", value="ON") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('checkbox_b5yuo'); $prefill_field->setValue('Prefill value'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("checkbox_b5yuo"); prefillField.setValue("Prefill value"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "CheckBox1"; prefillField.value = "Prefill Value"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Radio button Radio buttons can be prefilled in two ways: 1. Using the `id` of a radio button in the group 2. Using the `groupName` and `label` property of radio buttons ### Using radio button ID To prefill a radio button form field using its ID: - Provide the `id` of the form field and its `value` - The `id` must match exactly with one of the radio button's `id` in your document - Set `value` to `"ON"` to select it or `"OFF"` to unselect it Selecting one radio button automatically unselects other radio buttons in the same group. {% codetab id="codetab3" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "radioChild_AknIg", "Value": "ON" } ] } ' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "radioChild_AknIg", Value = "ON" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="radioChild_AknIg", value="ON") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('radioChild_AknIg'); $prefill_field->setValue('Prefill value'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("radioChild_AknIg"); prefillField.setValue("Prefill value"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "RadioGroupChild1"; prefillField.value = "Prefill Value"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ### Using radio button group To prefill a radio button using `groupName` and `label`: - Use the `groupName` of the radio button group as the `id` - Provide one of the radio button's `label` as the `value` Consider the following example where a radio button group is created to allow job applicants to select their level of expertise in a coding. The radio buttons provide three options: `Novice`, `Intermediate` and `Expert`. Below is a simplified code snippet for document send API request. Please note that this is a minimal example, and many properties have been omitted for the brevity. ```json { "signers": { "formFields": { { "fieldType": "RadioButton", "label": "Novice", "groupName": "CodingExpertise", }, { "fieldType": "RadioButton", "label": "Intermediate", "groupName": "CodingExpertise", }, { "fieldType": "RadioButton", "label": "Expert", "groupName": "CodingExpertise", } } } } ``` Here's how you can select the `Intermediate` radio button within the `CodingExpertise` group. If either the `Novice` or `Expert` radio buttons are currently selected, they will automatically deselect when you prefill the choice as `Intermediate`. {% codetab id="codetab4" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "CodingExpertise", "Value": "Intermediate" } ] } ' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "CodingExpertise", Value = "Intermediate" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="CodingExpertise", value="Intermediate") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id = "YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('CodingExpertise'); $prefill_field->setValue('Intermediate'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("CodingExpertise"); prefillField.setValue("Intermediate"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "CodingExpertise"; prefillField.value = "Intermediate"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Editable date To prefill an editable date field, you must provide the date value exactly as it was specified when sending the document or as configured in the template. {% codetab id="codetab5" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "editableDate_67P9d", "Value": "02/19/2024" } ] } ' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "editableDate_67P9d", Value = "Prefill value" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="editableDate_67P9d", value="Prefill value") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('editableDate_vA8I8'); $prefill_field->setValue('Prefill value'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("editableDate_vA8I8"); prefillField.setValue("Prefill value"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "EditableDate1"; prefillField.value = "Prefill Value"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Dropdown To prefill an dropdown field, you must provide one of the dropdonw value exactly as it was specified when sending the document or as configured in the template. {% codetab id="codetab6" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "dropdown_qrsr1", "Value": "option1" } ] } ' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "dropdown_qrsr1", Value = "option1" } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="dropdown_qrsr1", value="option1") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('dropdown_7IcZv'); $prefill_field->setValue('option2'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("dropdown_7IcZv"); prefillField.setValue("option2"); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "Dropdown1"; prefillField.value = "Prefill Value"; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Image To prefill an image field, you must provide the image in base64 (data URI scheme) format in the `value` property. ### Format Syntax The format for the `value` property should be: ``` data:{{imageType}};base64,{{content}} ``` Where: - `{{imageType}}` is the MIME type of the image (e.g., image/png, image/jpeg) - `{{content}}` is the base64-encoded image data {% codetab id="codetab7" %} cURL ```shell curl -X PATCH 'https://api.boldsign.com/v1/document/prefillFields?documentId=2a448030-xxx-xxx-xxxx-58b1349662fc' \ -H 'Content-Type: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -d '{ "Fields": [ { "Id": "image_6Ogud", "Value": "data:image/png;base64,iVBORw0KGgoAAAANS..." } ] } ' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var prefillFieldRequest = new PrefillFieldRequest("YOUR_DOCUMENT_ID") { Fields = new List() { new PrefillField() { Id = "image_6Ogud", Value = "data:image/png;base64,iVBORw0KGgoAAAANS..." } }, }; documentClient.PrefillFields(prefillFieldRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) prefill_field = boldsign.PrefillField( id="image_6Ogud", value="data:image/png;base64,iVBORw0KGgoAAAANS...") prefill_field_request = boldsign.PrefillFieldRequest(fields=[prefill_field]) document_api.prefill_fields(document_id="YOUR_DOCUMENT_ID", prefill_field_request=prefill_field_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $prefill_field = new PrefillField(); $prefill_field->setId('image_J0Z7w'); $prefill_field->setValue('data:image/png;base64,iVBORw0KGgoAAAANS...'); $prefill_field_request = new PrefillFieldRequest(); $prefill_field_request->setFields([$prefill_field]); $document_api->prefillFields($document_id = 'YOUR_DOCUMENT_ID', $prefill_field_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); PrefillField prefillField = new PrefillField(); prefillField.setId("image_J0Z7w"); prefillField.setValue("data:image/png;base64,iVBORw0KGgoAAAANS..."); PrefillFieldRequest prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.setFields(Arrays.asList(prefillField)); documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` NodeJS ```js import { DocumentApi, PrefillField, PrefillFieldRequest } from "boldsign"; import * as fs from 'fs'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const prefillField = new PrefillField(); prefillField.id = "Image1"; const imageBase64 = `data:image/png;base64,${fs.readFileSync('YOUR_FILE_PATH').toString('base64')}`; prefillField.value = imageBase64; const prefillFieldRequest = new PrefillFieldRequest(); prefillFieldRequest.fields = [prefillField]; documentApi.prefillFields("YOUR_DOCUMENT_ID", prefillFieldRequest); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the document to which the form fields have to be prefilled. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="Fields" /%}{% batch datatype="array" /%}{% required /%} - Array of form fields to be prefilled. {% nestedtable %} - {% arguments name="Id" /%}{% batch datatype="string" /%}{% required /%} - The ID of the form field to be prefilled. This can be obtained from the properties API. *** - {% arguments name="Value" /%}{% batch datatype="string" /%}{% required /%} - The value to be assigned to the form field. {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="array" /%} - Email address of the sender if you are prefilling the on behalf of documents. {% /nestedtable %} --- # File: documents\remove-authentication-from-the-document.md # Remove authentication from the document {% patch /%} {% path text="/v1/document/RemoveAuthentication" /%} Removes authentication from the signature request document, and the recipient is no longer required to provide a secure code when accessing the signing page. ## Code snippet The following sample code snippet requests for the removal of authentication for a particular recipient in the document signing process. {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/RemoveAuthentication?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"EmailId\": \"alexgayle@cubeflakes.com\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.RemoveAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) remove_authentication = boldsign.RemoveAuthentication(emailId="david@cubeflakes.com") document_api.remove_authentication(document_id="YOUR_DOCUMENT_ID", remove_authentication =remove_authentication) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $remove_authentication = new RemoveAuthentication(); $remove_authentication->setEmailId('alexgayle@cubeflakes.com'); $document_api->removeAuthentication($document_id = 'YOUR_DOCUMENT_ID', $remove_authentication); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); RemoveAuthentication removeAuthentication = new RemoveAuthentication(); removeAuthentication.setEmailId("alexgayle@cubeflakes.com"); documentApi.removeAuthentication("YOUR_DOCUMENT_ID", removeAuthentication); ``` NodeJS ```js import { DocumentApi, RemoveAuthentication } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const removeAuthentication = new RemoveAuthentication(); removeAuthentication.emailId = "alexgayle@boldsign.dev"; documentApi.removeAuthentication("YOUR_DOCUMENT_ID", removeAuthentication); ``` {% /codetab %} If a document contains repeated signers with signing order, in that case, the recipient's signing order can be specified along with the signer's email in the remove authentication request, as shown in the following code snippet. {% codetab id="codetab2" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/RemoveAuthentication?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"EmailId\": \"alexgayle@cubeflakes.com\", \"zOrder\": 2}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.RemoveAuthentication("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com", 1); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) remove_authentication = boldsign.RemoveAuthentication(emailId="david@cubeflakes.com", zOrder=1) document_api.remove_authentication(document_id="YOUR_DOCUMENT_ID", remove_authentication =remove_authentication) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $remove_authentication = new RemoveAuthentication(); $remove_authentication->setEmailId('alexgayle@cubeflakes.com'); $remove_authentication->setZOrder(1); $document_api->removeAuthentication($document_id = 'YOUR_DOCUMENT_ID', $remove_authentication); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); RemoveAuthentication removeAuthentication = new RemoveAuthentication(); removeAuthentication.setEmailId("alexgayle@cubeflakes.com"); removeAuthentication.setzOrder(1); documentApi.removeAuthentication("YOUR_DOCUMENT_ID", removeAuthentication); ``` NodeJS ```js import { DocumentApi, RemoveAuthentication } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const removeAuthentication = new RemoveAuthentication(); removeAuthentication.emailId = "alexgayle@cubeflakes.com"; removeAuthentication.zOrder = 1; documentApi.removeAuthentication("YOUR_DOCUMENT_ID", removeAuthentication); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="EmailId" /%}{% batch datatype="string" /%}{% required /%} - Email address of the signer. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - If the document is created on behalf of the sender, the sender's identity email address must be specified. --- - {% arguments name="zOrder" /%}{% batch datatype="Int" /%} - A number that denotes the signer's order, which targets the given email address present in the recipient list. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: documents\revoke-document.md # Revoke document {% post /%} {% path text="/v1/document/revoke" /%} The document signing process can be called off or revoked by the sender of the document. Once you revoke a document, signers can no longer view or sign it. Revoke action can only be performed on documents that have not completed the signing process. ## Code snippet {% codetab %} cURL ```shell curl -X POST "https://api.boldsign.com/v1/document/revoke?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"Message\": \"This is document revoke message\"}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.RevokeDocument("YOUR_DOCUMENT_ID", "This is document revoke message"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) revoke_document = boldsign.RevokeDocument( message="This is document revoke message") document_api.revoke_document(document_id="YOUR_DOCUMENT_ID", revoke_document=revoke_document) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $revoke_document = new RevokeDocument(); $revoke_document->setMessage("This is document revoke message"); $document_api->revokeDocument($document_id = 'YOUR_DOCUMENT_ID', $revoke_document); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); RevokeDocument revokeDocument = new RevokeDocument(); revokeDocument.setMessage("This is document revoke message"); documentApi.revokeDocument("YOUR_DOCUMENT_ID", revokeDocument); ``` NodeJS ```js import { DocumentApi, RevokeDocument } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const revokeDocumentRequest = new RevokeDocument(); revokeDocumentRequest.message = "This is document revoke message"; documentApi.revokeDocument("YOUR_DOCUMENT_ID", revokeDocumentRequest); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - ID of the requested document to revoke. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="Message" /%}{% batch datatype="string" /%}{% required /%} - The exact reason for performing a revoke action. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - If the document is created on behalf of the sender, the sender's identity email address must be specified. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: documents\send-document.md # Document A document is also known as an envelope. It acts as an overall container for BoldSign transactions. A document in BoldSign contains one or more files, in which the signature will be added electronically, details about the sender and signers, status, history, etc. Each document has a unique ID, and you can use that for identifying or fetching the document. Using BoldSign, you can send documents to others for eSignatures. In addition, you can perform various operations like self-sign, sign the document as a recipient, send the document on behalf of another user, add authentication, remind signers, delete a document, get document details, get a document list, etc. ## Asynchronous document processing The process of document send is asynchronous. Although you will promptly receive the document ID upon initiation, the actual file may still be undergoing processing in the background. To determine whether the document has been successfully sent, you must listen for the webhooks. The system will trigger either a `Sent` or `SendFailed` event, indicating the success or failure of the document transmission, respectively. In the event of failure, the system will send a `SendFailed` event along with an accompanying error message. It is imperative to address and resolve this error to ensure the proper sending of the document in the next request. {% customlink href="/webhooks/introduction/" text="Read more about webhooks" /%} ## Document not found If you discover that a document is not present in your account even after receiving a `documentId` in the API response, it is directly tied to the asynchronous document processing, as explained in the preceding section. To ascertain whether the document has been successfully created, you should actively monitor the `Sent` and `SendFailed` webhook events. These events will provide confirmation regarding the status of the document, indicating whether it has been successfully created or if an issue has occurred during the process. ## Send documents {% post /%} {% path text="/v1/document/send" /%} You can request signatures from others by sending the documents for signing. It is not mandatory for the signers to have a BoldSign account. Thus, the signer can sign a document sent by another user with or without a BoldSign account. If required, you can also add yourself as one of the signers. To self-sign a document, you can send a signature request to yourself alone. This API supports both `multipart/form-data` and `application/json` content types. ### Code snippet using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DisableExpiryAlert=false' \ -F 'ReminderSettings.ReminderDays=5' \ -F 'BrandId=' \ -F 'ReminderSettings.ReminderCount=3' \ -F 'EnableReassign=true' \ -F 'Message=' \ -F 'Signers={ "Name": "sdc", "EmailAddress": "alexgayle@cubeflakes.com", "SignerType": "Signer", "FormFields": [ { "Id": "string", "Name": "string", "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 50, "Y": 50, "Width": 1, "Height": 1 }, "IsRequired": true }, { "Id": "string", "Name": "string", "FieldType": "Label", "PageNumber": 1, "Bounds": { "X": 150, "Y": 250, "Width": 1, "Height": 1 }, "IsRequired": true, "BackgroundHexColor": "string" } ], "Locale": "EN" }' \ -F 'ExpiryDays=30' \ -F 'EnablePrintAndSign=false' \ -F 'AutoDetectFields=false' \ -F 'OnBehalfOf=' \ -F 'EnableSigningOrder=false' \ -F 'UseTextTags=false' \ -F 'SendLinkValidTill=' \ -F 'FileUrls=string' \ -F 'Title=dcsd' \ -F 'HideDocumentId=false' \ -F 'EnableEmbeddedSigning=false' \ -F 'ExpiryDateType=Days' \ -F 'ReminderSettings.EnableAutoReminder=true' \ -F 'ExpiryValue=60' \ -F 'DisableEmails=false' \ -F 'DisableSMS=false' \ -F 'MetaData={ "DocumentType": "new", "DocumentCategory": "software" }' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); List formField = new List { new FormField( id: "Signature", type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)) }; var documentDetails = new SendForSign { Title = "Agreement", Signers = new List { new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formField) }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", FilePath = "YOUR_FILE_PATH", } }, }; var documentCreated = documentClient.SendDocument(documentDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) form_field = boldsign.FormField( fieldType="Signature", pageNumber=1, bounds=boldsign.Rectangle(x=50, y=50, width=200, height=25)) document_signer = boldsign.DocumentSigner( name="David", emailAddress="david@cubeflakes.com", signerType="Signer", formFields=[form_field]) send_for_sign = boldsign.SendForSign( title= "Document SDK API", files=["YOUR_FILE_PATH"], signers=[document_signer]) document_created = document_api.send_document(send_for_sign) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $form_field = new FormField(); $form_field->setFieldType('Signature'); $form_field->setPageNumber(1); $bounds = new Rectangle([100, 100, 100, 50]); $form_field->setBounds($bounds); $document_signer = new DocumentSigner(); $document_signer->setName("David"); $document_signer->setEmailAddress("david@cubeflakes.com"); $document_signer->setSignerType("Signer"); $document_signer->setFormFields([$form_field]); $send_for_sign = new SendForSign(); $files = new FileInfo(); $files = 'YOUR_FILE_PATH'; $send_for_sign->setFiles([$files]); $send_for_sign->setSigners([$document_signer]); $send_for_sign->setTitle('Document SDK API'); $document_created = $document_api->sendDocument($send_for_sign); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); FormField signatureField = new FormField(); signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE); signatureField.setPageNumber(1); Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f); signatureField.setBounds(bounds); DocumentSigner signer = new DocumentSigner(); signer.setName("David"); signer.setEmailAddress("david@cubeflakes.com"); signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER); signer.setFormFields(Arrays.asList(signatureField)); SendForSign sendForSign = new SendForSign(); File file = new File("YOUR_FILE_PATH"); sendForSign.setFiles(Arrays.asList(file)); sendForSign.setSigners(Arrays.asList(signer)); sendForSign.setTitle("Document SDK API"); DocumentCreated documentCreated = documentApi.sendDocument(sendForSign); ``` NodeJS ```js import { DocumentApi, DocumentSigner, FormField, Rectangle, SendForSign } from "boldsign"; import * as fs from 'fs'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; formField.bounds = bounds; const documentSigner = new DocumentSigner(); documentSigner.name = "David"; documentSigner.emailAddress = "david@cubeflakes.com"; documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer; documentSigner.formFields = [formField]; const files = fs.createReadStream("YOUR_FILE_PATH"); const sendForSign = new SendForSign(); sendForSign.title = "Agreement"; sendForSign.signers = [documentSigner]; sendForSign.files = [files]; const documentCreated =documentApi.sendDocument(sendForSign); ``` {% /codetab %} ### Code snippet using application/json {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "DisableExpiryAlert": false, "ReminderSettings": { "ReminderDays": 5, "ReminderCount": 3, "EnableAutoReminder": true }, "BrandId": "", "EnableReassign": true, "Message": "", "Signers": [ { "Name": "Alex", "EmailAddress": "alexgayle@boldsign.dev", "SignerType": "Signer", "FormFields": [ { "Id": "string", "Name": "string", "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 50, "Y": 50, "Width": 125, "Height": 25 }, "IsRequired": true }, { "Id": "string", "Name": "string", "FieldType": "Label", "PageNumber": 1, "Bounds": { "X": 150, "Y": 250, "Width": 125, "Height": 25 }, "IsRequired": true, "Value": "string", "BackgroundHexColor": "string" } ], "Locale": "EN" } ], "ExpiryDays": 30, "EnablePrintAndSign": false, "AutoDetectFields": false, "OnBehalfOf": "", "EnableSigningOrder": false, "UseTextTags": false, "SendLinkValidTill": "", "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Sampledocument", "HideDocumentId": false, "EnableEmbeddedSigning": false, "ExpiryDateType": "Days", "ExpiryValue": 60, "DisableEmails": false, "DisableSMS": false, "MetaData": { "DocumentType": "new", "DocumentCategory": "Software" } }' ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="Files" /%}{% batch datatype="array" /%} - The files to be uploaded for sending signature request. `.pdf,` `.png,` `.jpg,` `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. For a single file with file name, the Base64 format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content}}", "fileName": "{{fileName}}" }"]`. For multiple files with file name, the format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content1}}", "fileName": "{{fileName}}" }, {...}]`. --- - {% arguments name="Title" /%}{% batch datatype="string" /%}{% required /%} - This is the title of the document that will be displayed in the BoldSign user interface as well as in the signature request email. --- - {% arguments name="Message" /%}{% batch datatype="string" /%} - A message for all the recipients. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Signers" /%}{% batch datatype="array" /%} - Details of the signers. One or more signers can be specified. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="string" /%}{% required /%} - Name of the signer. This name will appear on all the emails, notifications, and the audit files. --- - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%}{% required /%} - Mail ID of the signer. This ID will appear on all the emails, notifications, and the audit files. --- - {% arguments name="PrivateMessage" /%}{% batch datatype="string" /%} - When the specified signer proceeds to sign the document, a message appears. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="string" /%} - This is used to allow authentication for a specific signer. We have three types of authentication. They are `AccessCode`, `EmailOTP`, `SMSOTP` and `IdVerification`. The default value is `None`. --- - {% arguments name="AuthenticationCode" /%}{% batch datatype="string" /%} - The authentication access code that the signer must enter to access the document. This should be shared with the signer. --- - {% arguments name="EnableEmailOTP" /%}{% batch datatype="boolean" /%} - Enables the email OTP authentication. when this feature is enabled, the signer must enter the OTP received via email, to access the document. --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When you set the authentication type to `SMSOTP` or select the delivery mode as `SMS` or `EmailAndSMS`, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature. After which, they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. Maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable int" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="DeliveryMode" /%}{% batch datatype="string" /%} - This property allows you to specify the desired delivery mode for sending notifications. We have three types of delivery modes. They are `Email` , `SMS` and `EmailAndSMS`. The default value is `Email`. --- - {% arguments name="SignerType" /%}{% batch datatype="SignerType" /%} - Type of the signer. The values are `Signer,` `Reviewer,` and `InPersonSigner.` --- - {% arguments name="SignType" /%}{% batch datatype="enum" /%} - Specifies whether the recipient is an individual signer (`Single`) or a contact group signer (`Group`). If not specified, it defaults to `Single`. --- - {% arguments name="GroupId" /%}{% batch datatype="string" /%} - The identifier of the contact group to be used as the signer. You can obtain it from the Contact Groups API. --- - {% arguments name="HostEmail" /%}{% batch datatype="string" /%} - Mail ID of the host. It is applicable when the signerType is set to `InPersonSigner`. --- - {% arguments name="SignerRole" /%}{% batch datatype="string" /%} - The role of the signer, which was specified while creating the template. --- - {% arguments name="AllowFieldConfiguration" /%}{% batch datatype="boolean" /%} - This option enables the signer to add fields at their end while signing the document. If this option is set to `false`, the signer cannot add fields, and they must complete the assigned ones. By default, it is set to false. --- - {% arguments name="FormFields" /%}{% batch datatype="array" /%} - List of form fields associated with the signer. {% nestedtable %} - {% arguments name="Id" /%}{% batch datatype="string" /%} - The id of the form field. ID must start with a letter or an underscore and can only contain letters, digits, and underscores. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the form field. --- - {% arguments name="Type" /%}{% batch datatype="string" /%}{% required /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="PageNumber" /%}{% batch datatype="integer" /%}{% required /%} - Page number in the document, in which the form field has to be placed. The page number must be greater than zero. --- - {% arguments name="Bounds" /%}{% batch datatype="Rectangle" /%}{% required /%} - Position and size values of the form field to be placed. {% nestedtable %} - {% arguments name="X" /%}{% batch datatype="float" /%} - X-coordinate value to place the form field. --- - {% arguments name="Y" /%}{% batch datatype="float" /%} - Y-coordinate value to place the form field. --- - {% arguments name="Width" /%}{% batch datatype="float" /%}{% required /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%}{% required /%} - Height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="BackgroundHexColor" /%}{% batch datatype="string" /%} - Customize the label field background color. The value should be a hex color code. Example - `#FFFFFF`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. The default size font is **13.0** . --- - {% arguments name="Font " /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica`, ` TimesNewRoman` and `NotoSans`. The default font family is `Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc.` --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the fieldType is set to `RadioButton.` --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed in the textbox form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="string" /%} - Type of validation for the textbox form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email` and `None`. The default validation type is `None`. --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the validationType is set to `Regex.` --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the textbox form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that are allowed to upload on the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that are allowed to upload on the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate " /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the editable date form field. When `null` is provided, the value is set to `none`. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:10 PM) - `h:mm:ss tt` (2:45:20 PM) - `HH:mm:ss` (14:30:20) - `H:mm:ss` (9:15:10) - `None` (Disabled, no time will be displayed) {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values that have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="CollaborationSettings" /%}{% batch datatype="object" /%} - Options to configure collaboration settings for form field. {% nestedtable %} - {% arguments name="IsRequired" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether collaborative fields are mandatory for signers collaborating on the document. --- - {% arguments name="RequireSignerApproval" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether signers need to verify and approve the document after collaborators have made changes to the collaborative fields. --- - {% arguments name="RequireInitial" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether the collaborators must fill in their initials when editing collaborative fields. --- - {% arguments name="AllowedSigners" /%}{% batch datatype="String array" /%} - This property is used to specify the list of signer IDs who are allowed to collaborate on editing this field. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} --- - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Index of the language, in which the document signing pages and emails for the signer should render. The supported languages are `1-English`, `2-Spanish`, `3-German`, `4-French`, and `5-Romanian`. Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients by configuring the properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is edited. {% /nestedtable %} --- - {% arguments name="EnableQes" /%}{% batch datatype="Nullable boolean" /%} - When set to true, the signer will be allowed to sign the document with a qualified electronic signature (QES). It can only be assigned to a single signer. When there are multiple signers in a document, the signer order option should be enabled to ensure only the last person in the document is enabled with QES, and the last signer order also should not have multiple signers. --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} --- - {% arguments name="CC" /%}{% batch datatype="array" /%} - Mail ID of the CC recipients. One or more CC recipients can be specified. {% nestedtable %} - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Mail ID of the CC recipients. {% /nestedtable %} --- - {% arguments name="EnableSigningOrder" /%}{% batch datatype="boolean " /%} - Enables or disables the signing order. When enabled, signers must sign the document in the designated order and cannot sign in parallel. The default value is set to `false.` --- - {% arguments name="ExpiryDays" /%}{% batch datatype="integer" /%} - The number of days after which the document expires. The default value is `60` days. --- - {% arguments name="ReminderSettings.EnableAutoReminder" /%}{% batch datatype="boolean" /%} - Enables or disables the auto-reminder. --- - {% arguments name="ReminderSettings.ReminderDays" /%}{% batch datatype="integer" /%} - The number of days between each automatic reminder. --- - {% arguments name="ReminderSettings.ReminderCount" /%}{% batch datatype="integer" /%} - The number of times the auto-reminder should be sent. --- - {% arguments name="DisableEmails" /%}{% batch datatype="boolean" /%} - Disables the sending of document related emails to all the recipients. The default value is `false.` --- - {% arguments name="DisableSMS" /%}{% batch datatype="boolean" /%} - Disables the sending of document related SMS to all the recipients. The default value is `false`. --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - You can customize the logo, colors, and other elements of the signature request emails and document signing pages to match your company branding. The ID of the existing brand can be obtained from the branding API and from the web app. --- - {% arguments name="HideDocumentId" /%}{% batch datatype="boolean" /%} - Decides whether the document ID should be hidden or not. --- - {% arguments name="Labels" /%}{% batch datatype="array" /%} - Labels (tags) are added to the document to categorize and filter the documents. One or more labels can be added. Labels cannot contain whitespaces and must not exceed 255 characters. --- - {% arguments name="FileUrls" /%}{% batch datatype="array" /%} - The URL of the file must be publicly accessible. `.pdf,` `.png,` `.jpg,` `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. --- - {% arguments name="SendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="UseTextTags" /%}{% batch datatype="Boolean" /%} - When enabled, it will convert all the tags defined in the document to BoldSign form fields. The default value is `false`. --- - {% arguments name="TextTagDefinitions" /%}{% batch datatype="array" /%} - This can be used for long text tag handling. {% nestedtable %} - {% arguments name="DefinitionId" /%}{% batch datatype="string" /%} - The definition id of the text tag. --- - {% arguments name="Type" /%}{% batch datatype="FieldType" /%} - The type of the form field. --- - {% arguments name="signerIndex" /%}{% batch datatype="integer" /%} - The signer index of the form field. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - When disabled, the signer is not required to fill out the specific form field. The default value is `true`. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - The placeholder of the form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="FieldId" /%}{% batch datatype="string" /%} - The field id of the form field. --- - {% arguments name="Font" /%}{% batch datatype="object" /%} - The font of the form field. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="FontFamily" /%} - Font family. The values are `Courier,` ` Helvetica,` ` TimesNewRoman,` and `NotoSans.` The default font family is ` Helvetica`. --- - {% arguments name="Color" /%}{% batch datatype="string" /%} - Color of the font. The value should be hex color code. Example - `#035efc`. --- - {% arguments name="Size" /%}{% batch datatype="Nullable float" /%} - Size of the font. --- - {% arguments name="Style" /%}{% batch datatype="FontStyle" /%} - Style of the font. The values are `Regular,` `Bold,` `Italic,` and `Underline`. The default font style is `Regular` . --- - {% arguments name="LineHeight" /%}{% batch datatype="Nullable int" /%} - Height of a line in the text. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. {% /nestedtable %} --- - {% arguments name="Validation" /%}{% batch datatype="object" /%} - When we select the type as `TextBox`, the validation of the form field is required. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - The validation type of the textbox form field. The available values are `None,` `NumbersOnly,` `EmailAddress,` `Currency,` and `CustomRegex.` The default value is `None.` --- - {% arguments name="Regex" /%}{% batch datatype="string" /%} - The custom regex of the textbox form field. When we set the ValidationType to `CustomRegex`, it will be required. --- - {% arguments name="RegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box field. {% /nestedtable %} --- - {% arguments name="Size" /%}{% batch datatype="object" /%} - This can be used to specify the form field's height and width. {% nestedtable %} - {% arguments name="Width" /%}{% batch datatype="float" /%} - The width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - The height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="RadioGroupName" /%}{% batch datatype="string" /%} - The form field's group name, which is required when we set the type as `RadioButton.` --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - The value of the form field. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The options of the dropdown form field. --- - {% arguments name="OffSet" /%}{% batch datatype="object" /%} - Specifies the offset positioning for the text tag, allowing adjustments to its location relative to the computed position. The computed value after value must remain within the page dimensions. {% nestedtable %} - {% arguments name="OffSetX" /%}{% batch datatype="double" /%} - Adjusts the text tag's position horizontally (left or right). --- - {% arguments name="OffSetY" /%}{% batch datatype="double" /%} - Adjusts the text tag's position vertically (top or bottom). {% /nestedtable %} --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox fields to sync them. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="CollaborationSettings" /%}{% batch datatype="object" /%} - Options to configure collaboration settings for form field. {% nestedtable %} - {% arguments name="IsRequired" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether collaborative fields are mandatory for signers collaborating on the document. --- - {% arguments name="RequireSignerApproval" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether signers need to verify and approve the document after collaborators have made changes to the collaborative fields. --- - {% arguments name="RequireInitial" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether the collaborators must fill in their initials when editing collaborative fields --- - {% arguments name="AllowedSigners" /%}{% batch datatype="String array" /%} - This property is used to specify the list of signer IDs who are allowed to collaborate on editing this field. {% /nestedtable %} {% /nestedtable %} --- - {% arguments name="EnablePrintAndSign" /%}{% batch datatype="boolean" /%} - Allows the signer to reassign the signature request to another person. The default value is `true`. --- - {% arguments name="DisableExpiryAlert" /%}{% batch datatype="array" /%} - Disables the alert, which was shown one day before the expiry of the document. --- - {% arguments name="DocumentInfo" /%}{% batch datatype="array" /%} - Options to customize the information, like the title and description of the document for a particular signer. {% nestedtable %} - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the document. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - A message for the signer. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Mail ID of the user to send the document on behalf of them. --- - {% arguments name="AutoDetectFields" /%}{% batch datatype="boolean" /%} - When enabled, it will convert all the fillable form fields in the document to BoldSign form fields. BoldSign supports Textbox, Checkbox, Radio button, and Signature form fields. Other fields will not be detected as of now. The default value is `false`. --- - {% arguments name="DocumentDownloadOption" /%}{% batch datatype="enum" /%} - This option allows you to configure how the uploaded files, especially multiple files, should be downloaded: as a single combined document, as separate documents, or based on the user preference. The values are `Combined`, `Individually`, and `UserPreference`. The default value is `Combined`. If the value is `null`, the setting configured in the business profile settings will be considered. --- - {% arguments name="FormGroups" /%}{% batch datatype="array" /%} - Manages the rules and configuration of grouped form fields. {% nestedtable %} - {% arguments name="MinimumCount" /%}{% batch datatype="integer" /%} - The minimum number of items that must be selected in a form group. The minimum count value must be greater than zero. --- - {% arguments name="MaximumCount" /%}{% batch datatype="integer" /%} - The maximum number of items that must be selected in a form group. The maximum count value must be greater than zero. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The data sync tag of the form group. --- - {% arguments name="GroupNames" /%}{% batch datatype="array" /%} - The group names to which this form group rule should be applied. --- - {% arguments name="GroupValidation" /%}{% batch datatype="string" /%} - Specify the form group validation type, the available validations are `Minimum`, `Maximum`, `Absolute`, and `Range`. {% /nestedtable %} --- - {% arguments name="MetaData" /%}{% batch datatype="dictionary" /%} - Additional information about the document in the form of key-value pairs. Up to 50 key-value pairs can be added. The key is limited to 50 characters, and the value is limited to 500 characters. --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients or CC collectively by configuring properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is edited. --- - {% arguments name="Viewed" /%}{% batch datatype="boolean" /%} - Indicates whether the CC should be notified when the document is viewed. {% /nestedtable %} --- - {% arguments name="EnableAuditTrailLocalization" /%}{% batch datatype="boolean" /%} - Enable localization for audit trail based on the signer's language. If `null` is provided, the value will be inherited from the Business Profile settings. Only one additional language can be specified in the signer's languages besides English. --- - {% arguments name="DownloadFileName" /%}{% batch datatype="string" /%} - Defines the custom format for the file name of downloaded document files. You can combine your own file name elements with the following predefined dynamic variables: - `title` - `documentId` - `signername` - `signername_last` - `signername_order#1` - `sendername` - `completeddate` - `status` The `#1` in `signername_order#1` serves as a placeholder and should be replaced with an actual value, such as `signername_order#3`, to represent a 3rd signer's name. The maximum file name length is 250 characters. If the generated name exceeds this limit, it will be truncated to fit within the limit. This property is optional; if not provided, the default format configured in the business profile will be used. --- - {% arguments name="AllowedSignatureTypes" /%}{% batch datatype="array" /%} - Defines the signature input options available to the signer during the signing process. This property customizes the signature and initial field dialog by controlling which signature input methods are shown to the signer. The available signature types are: `Text`, `Draw`, and `Image`. --- - {% arguments name="ScheduledSendTime" /%}{% batch datatype="long" /%} - This property allows you to specify the date and time in Unix Timestamp format to schedule a document for sending at a future time. The scheduled time must be at least 30 minutes from the current time and must not exceed the document’s expiry date. --- - {% arguments name="EnableAllowSignEverywhere" /%}{% batch datatype="Nullable boolean" /%} - This property allows you to define whether all signature form fields on the signing page should use the same signature value applied by the signer. If this property is not specified, the signature values will be inherited from the business profile configuration.. --- - {% arguments name="GroupSignerSettings" /%}{% batch datatype="object" /%} - Configures whether contact groups can be used as signers for this document, and restricts which contact groups are allowed. {% nestedtable %} - {% arguments name="Enabled" /%}{% batch datatype="boolean" /%} - When set to `true`, contact groups can be used as signers. --- - {% arguments name="AllowedDirectories" /%}{% batch datatype="array" /%} - The list of allowed directory values. Only contact groups assigned to one of these directories can be used as signers. {% /nestedtable %} {% /nestedtable %} **Notes:** 1. Please note that you must use either the `fileUrls` or `files` parameter in a request, both cannot be used together. 2. For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ### Example response ***201 Created*** ```json { "documentId": "8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c" } ``` --- # File: documents\send-document-from-draft.md # Send document from draft {% post /%} {% path text="/v1-beta/document/draftSend" /%} This API endpoint converts a draft document to in-progress status and sends it for signature. In BoldSign, a draft document is one that has been created but not yet sent to recipients. To use this endpoint, you'll need to provide the document ID of your draft document. The API will then initiate the sending process and return the same document ID, which you can use to track the document's progress. This endpoint performs similar validations as the {% customlink href="/documents/send-document/" text="document send API" /%}. If any information is incomplete or incorrectly configured, you'll receive an error similar to those encountered with the {% customlink href="/documents/send-document/" text="document send API" /%}. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/draftSend?documentId=8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var documentCreated = documentClient.SendDocumentFromDraft("YOUR_DOCUMENT_ID"); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_api.draft_send(document_id="YOUR_DOCUMENT_ID") ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_sent = $document_api->draftSend($document_id = 'YOUR_DOCUMENT_ID'); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); documentApi.draftSend("YOUR_DOCUMENT_ID"); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentCreated = await documentApi.draftSend("YOUR_DOCUMENT_ID"); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The unique document id of the draft document. --- {% /nestedtable %} ## Example response ***201 Created*** ```json { "documentId": "8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c" } ``` --- # File: documents\send-document-from-template.md # Send document from template {% post /%} {% path text="/v1/template/send" /%} Templates are created in the same way as regular documents, but instead of associating signature fields with people, we simply associate fields with roles. For more information, please refer to the {% customlink href="/template/create-template/" text="Create template" /%} article. When you need to send the same contracts out for signature to different groups of people repeatedly, you can use templates to save time. This section demonstrates how to send a document for signature by using an existing template. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=b8085b47-63b3-47f8-8d5e-cb0acfe2d916' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "files":[ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Invitation form", "Message": "Kindly review and sign this.", "Roles": [ { "RoleIndex": 50, "SignerName": "Richard", "SignerOrder": 1, "SignerEmail": "richard@cubeflakes.com", "PrivateMessage": "Please check and sign the document.", "AuthenticationCode": "281028", "EnableEmailOTP": false, "SignerType": "Signer", "SignerRole": "Manager", "FormFields": [ { "Id": "SignField", "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 100, "Y": 100, "Width": 100, "Height": 50 }, "IsRequired": true }, ], "Locale": "EN" } ], "BrandId": "8208b6d3-7ee0-4a1a-b597-1bbe41018107", "Labels": [ "Invitation" ], "DisableEmails": false, "DisableSMS": false, "HideDocumentId": true, "ReminderSettings": { "EnableAutoReminder": true, "ReminderDays": 3, "ReminderCount": 10 }, "CC": [ { "EmailAddress": "alexgayle@cubeflakes.com" } ], "ExpiryDays": 180, "ExpiryDateType": "Days", "ExpiryValue": 60, "DisableExpiryAlert": true, "EnablePrintAndSign": true, "EnableReassign": true, "EnableSigningOrder": true, "RoleRemovalIndices": [1, 2], }` ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var sendForSignFromTemplate = new SendForSignFromTemplate { TemplateId = "YOUR_TEMPLATE_ID", Roles = [ new Roles() { RoleIndex = 1, SignerName = "David", SignerEmail = "david@cubeflakes.com", SignerType = SignerType.Signer } ] }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) role = boldsign.Role( roleIndex=1, signer_name="Richard", signer_email="richard@cubeflakes.com", signerType='Signer') send_for_sign_from_template = boldsign.SendForSignFromTemplateForm(roles=[role]) document_created = template_api.send_using_template(template_id = "YOUR_TEMPLATE_ID", send_for_sign_from_template_form=send_for_sign_from_template) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $role = new Role(); $role->setRoleIndex(1); $role->setSignerName('Richard'); $role->setSignerEmail('richard@cubeflakes.com'); $role->setSignerType("Signer"); $send_for_sign_from_template = new SendForSignFromTemplateForm(); $send_for_sign_from_template->setRoles([$role]); $document_created = $template_api->sendUsingTemplate($template_id = 'YOUR_TEMPLATE_ID', $send_for_sign_from_template); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); Role role = new Role(); role.roleIndex(1); role.setSignerName("Richard"); role.setSignerEmail("richard@cubeflakes.com"); role.setSignerType(Role.SignerTypeEnum.SIGNER); SendForSignFromTemplateForm sendForSignFromTemplate = new SendForSignFromTemplateForm(); sendForSignFromTemplate.setRoles(Arrays.asList(role)); DocumentCreated documentCreated = templateApi.sendUsingTemplate("YOUR_TEMPLATE_ID", sendForSignFromTemplate); ``` NodeJS ```js import { TemplateApi, FormField, Rectangle, Role, SendForSignFromTemplateForm } from "boldsign"; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const role = new Role(); role.roleIndex = 1; role.signerName = "Richard"; role.signerEmail = "richard@cubeflakes.com"; role.signerType = Role.SignerTypeEnum.Signer; const sendForSignFromTemplate = new SendForSignFromTemplateForm(); sendForSignFromTemplate.roles = [role]; const documentCreated = templateApi.sendUsingTemplate("YOUR_TEMPLATE_ID", sendForSignFromTemplate); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="templateId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the existing template to be used for sending the document. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - This is the title of the document that will be displayed in the BoldSign user interface as well as in the signature request email. --- - {% arguments name="Message" /%}{% batch datatype="string" /%} - A message for all the recipients. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Roles" /%}{% batch datatype="array" /%} - A role is simply a placeholder for a real person. For example, if we have a purchase order that will always be signed by two people, one from the company and one from the customer, we can create a template with two roles, `Customer` and `Representative.` {% nestedtable %} - {% arguments name="RoleIndex" /%}{% batch datatype="integer" /%}{% required /%} - The `roleIndex` represents the position of a role in a sequence. The role index should be in linear increments for each role (1, 2, 3, and so on). The index value must be between 1 and 50. --- - {% arguments name="SignerName" /%}{% batch datatype="string" /%} - Name of the signer. This name will appear on all the emails, notifications, and audit files. --- - {% arguments name="SignerOrder" /%}{% batch datatype="integer" /%} - Signing order of the signer. This is applicable when the signing order option is enabled. --- - {% arguments name="SignerEmail" /%}{% batch datatype="string" /%} - Mail ID of the signer. This ID will appear on all the emails, notifications, and on the audit file. --- - {% arguments name="HostEmail" /%}{% batch datatype="string" /%} - Mail ID of the host. It is applicable when the `signerType` is set to `InPersonSigner.` --- - {% arguments name="PrivateMessage" /%}{% batch datatype="string" /%} - Displays a message to the specified signer when they proceed to sign the document. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="string" /%} - This is used to allow authentication for a specific signer. We have three types of authentication. They are `AccessCode`, `EmailOTP`, `SMSOTP` and `IdVerification`. The default value is `None`. --- - {% arguments name="AuthenticationCode" /%}{% batch datatype="string" /%} - The authentication access code that the signer must enter to access the document. This should be shared with the signer. --- - {% arguments name="EnableEmailOTP" /%}{% batch datatype="boolean" /%} - Enables the email OTP authentication. when this feature is enabled, the signer must enter the OTP received via email, to access the document. --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When you set the authentication type to `SMSOTP` or select the delivery mode as `SMS` or `EmailAndSMS`, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature. After which, they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. Maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable int" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="DeliveryMode" /%}{% batch datatype="string" /%} - This property allows you to specify the desired delivery mode for sending notifications. We have three types of delivery modes. They are `Email` , `SMS` and `EmailAndSMS`. The default value is `Email`. --- - {% arguments name="SignerType" /%}{% batch datatype="SignerType" /%} - Type of the signer. The values are `Signer,` `Reviewer,` and `InPersonSigner.` --- - {% arguments name="SignType" /%}{% batch datatype="enum" /%} - Specifies whether the recipient is an individual signer (`Single`) or a contact group signer (`Group`). If not specified, it defaults to `Single`. --- - {% arguments name="GroupId" /%}{% batch datatype="string" /%} - The identifier of the contact group to be used as the signer. You can obtain it from the Contact Groups API. --- - {% arguments name="SignerRole" /%}{% batch datatype="string" /%} - The role of the signer, which was specified while creating the template. --- - {% arguments name="AllowFieldConfiguration" /%}{% batch datatype="boolean" /%} - This option enables the signer to add fields at their end while signing the document. If this option is set to `false`, the signer cannot add fields, and they must complete the assigned ones. By default, it is set to false. --- - {% arguments name="FormFields" /%}{% batch datatype="array" /%} - List of form fields associated with the signer. {% nestedtable %} - {% arguments name="Id" /%}{% batch datatype="string" /%} - The id of the form field. ID must start with a letter or an underscore and can only contain letters, digits, and underscores. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the form field. --- - {% arguments name="Type" /%}{% batch datatype="string" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="PageNumber" /%}{% batch datatype="integer" /%} - Page number in the document, in which the form field has to be placed. The page number must be greater than zero. --- - {% arguments name="Bounds" /%}{% batch datatype="Rectangle" /%} - Position and size values of the form field to be placed. {% nestedtable %} - {% arguments name="X" /%}{% batch datatype="float" /%} - X-coordinate value used to place the form field. --- - {% arguments name="Y" /%}{% batch datatype="float" /%} - Y-coordinate value used to place the form field. --- - {% arguments name="Width" /%}{% batch datatype="float" /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - Height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="BackgroundHexColor" /%}{% batch datatype="string" /%} - Customize the label field background colour. The value should be a hex color code. Example - `#FFFFFF`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. The default size font is **13.0** . --- - {% arguments name="Font" /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica`, ` TimesNewRoman` and `NotoSans`. The default font family is `Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the `fieldType` is set to `RadioButton`. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed on the text form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="ValidationType" /%} - Type of validation for the textbox form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email` and `None`. The default validation type is `None`. --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex`. --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that can be allowed to upload on the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that can be allowed to upload on the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFomat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate" /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the editable date form field. When `null` is provided, the value is set to `none`. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:10 PM) - `h:mm:ss tt` (2:45:20 PM) - `HH:mm:ss` (14:30:20) - `H:mm:ss` (9:15:10) - `None` (Disabled, no time will be displayed) {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values which have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="CollaborationSettings" /%}{% batch datatype="object" /%} - Options to configure collaboration settings for form field. {% nestedtable %} - {% arguments name="IsRequired" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether collaborative fields are mandatory for signers collaborating on the document. --- - {% arguments name="RequireSignerApproval" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether signers need to verify and approve the document after collaborators have made changes to the collaborative fields. --- - {% arguments name="RequireInitial" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether the collaborators must fill in their initials when editing collaborative fields. --- - {% arguments name="AllowedSigners" /%}{% batch datatype="String array" /%} - This property is used to specify the list of role indexes who are allowed to collaborate on editing this field. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} --- - {% arguments name="ExistingFormFields" /%}{% batch datatype="array" /%} - List of existing form fields in the document. {% nestedtable %} - {% arguments name="Index" /%}{% batch datatype="integer" /%} - Index of the existing form field. --- - {% arguments name="Id" /%}{% batch datatype="string" /%} - The ID of the existing form field. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value of the existing form field. --- - {% arguments name="IsReadOnly" /%}{% batch datatype="boolean" /%} - Decides whether this form field is readOnly or not. --- - {% arguments name="TemplateOrder" /%}{% batch datatype="integer" /%} - Specifies the position of the template instance within the templateIds array. It is used to update the value of an existing form field for a specific template instance. **Note:** Template order starts at 1. {% /nestedtable %} --- - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Index of the language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients by configuring the properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is edited. {% /nestedtable %} --- - {% arguments name="EnableQes" /%}{% batch datatype="Nullable boolean" /%} - When set to true, the signer will be allowed to sign the document with a qualified electronic signature (QES). It can only be assigned to a single signer. When there are multiple signers in a document, the signer order option should be enabled to ensure only the last person in the document is enabled with QES, and the last signer order also should not have multiple signers. --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - You can customize the logo, colors, and other elements of the signature request emails and document signing pages to match your company branding. The ID of the existing brand can be obtained from the branding API and from the web app. --- - {% arguments name="Labels" /%}{% batch datatype="array" /%} - Labels (tags) are added to the documents to categorize and filter them. One or more labels can be added. Labels cannot contain whitespaces and must not exceed 255 characters. --- - {% arguments name="DisableEmails" /%}{% batch datatype="boolean" /%} - Disables the sending of document related emails to all the recipients. The default value is `false`. --- - {% arguments name="DisableSMS" /%}{% batch datatype="boolean" /%} - Disables the sending of document related SMS to all the recipients. The default value is `false`. --- - {% arguments name="HideDocumentId" /%}{% batch datatype="boolean" /%} - Decides whether the document ID should be hidden or not. --- - {% arguments name="ReminderSettings" /%}{% batch datatype="boolean" /%} - Options to customize the auto-reminder settings. {% nestedtable %} - {% arguments name="EnableAutoReminder" /%}{% batch datatype="boolean" /%} - Enables or disables the auto-reminder. --- - {% arguments name="ReminderDays" /%}{% batch datatype="integer" /%} - The number of days between each automatic reminder. --- - {% arguments name="ReminderCount" /%}{% batch datatype="integer" /%} - The number of times the auto-reminder should be sent. {% /nestedtable %} --- - {% arguments name="CC" /%}{% batch datatype="array" /%} - Mail ID of the CC recipients. One or more CC recipients can be specified. {% nestedtable %} - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Mail ID of the CC recipients. {% /nestedtable %} --- - {% arguments name="ExpiryDays" /%}{% batch datatype="integer" /%} - The number of days after which the document expires. The default value is `60` days. --- - {% arguments name="EnablePrintAndSign" /%}{% batch datatype="boolean" /%} - Allows the signer to print the document, sign, and upload it. The default value is `false`. --- - {% arguments name="EnableReassign" /%}{% batch datatype="boolean" /%} - Allows the signer to reassign the signature request to another person. The default value is `true`. --- - {% arguments name="EnableSigningOrder" /%}{% batch datatype="boolean" /%} - Enables or disables the signing order. If this option is enabled, then the signers can only sign the document in the specified order and cannot sign in parallel. The default value is `false`. --- - {% arguments name="DisableExpiryAlert" /%}{% batch datatype="boolean" /%} - Disables the alert, which was shown one day before the expiry of the document. --- - {% arguments name="DocumentInfo" /%}{% batch datatype="array" /%} - Options to customize the information like title and description of the document for a particular signer. {% nestedtable %} - {% arguments name="Language" /%}{% batch datatype="integer" /%} - This specifies the language in which the document signing pages and emails should be rendered to the signer. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the document. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - A message for the signer. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Mail ID of the user to send the document on behalf of them. --- - {% arguments name="RoleRemovalIndices" /%}{% batch datatype="array" /%} - Removes the roles present in the template with their indices given in this property. --- - {% arguments name="DocumentDownloadOption" /%}{% batch datatype="enum" /%} - This option allows you to configure how the uploaded files, especially multiple files, should be downloaded: as a single combined document, as separate documents, or based on the user preference. The values are `Combined`, `Individually`, and `UserPreference`. The default value is `Combined`. If the value is `null`, the setting configured in the business profile settings will be considered. --- - {% arguments name="FormGroups" /%}{% batch datatype="array" /%} - Manages the rules and configuration of grouped form fields. {% nestedtable %} - {% arguments name="MinimumCount" /%}{% batch datatype="integer" /%} - The minimum number of items that must be selected in a form group. The minimum count value must be greater than zero. --- - {% arguments name="MaximumCount" /%}{% batch datatype="integer" /%} - The maximum number of items that must be selected in a form group. The maximum count value must be greater than zero. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The data sync tag of the form group. --- - {% arguments name="GroupNames" /%}{% batch datatype="array" /%} - The group names to which this form group rule should be applied. --- - {% arguments name="GroupValidation" /%}{% batch datatype="string" /%} - Specify the form group validation type, the available validations are `Minimum`, `Maximum`, `Absolute`, and `Range`. {% /nestedtable %} --- - {% arguments name="Files" /%}{% batch datatype="base64" /%} - The files to be uploaded for sending signature request. `.pdf,` `.png,` `.jpg,` `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. For a single file with file name, the Base64 format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content}}", "fileName": "{{fileName}}" }]`. For multiple files with file name, the format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content1}}", "fileName": "{{fileName}}" }, {...}]`. --- - {% arguments name="FileUrls" /%}{% batch datatype="array" /%} - The URL of the file must be publicly accessible. `.pdf`, `.png`, `.jpg`, `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients or CC collectively by configuring properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is edited. --- - {% arguments name="Viewed" /%}{% batch datatype="boolean" /%} - Indicates whether the CC should be notified when the document is viewed. {% /nestedtable %} --- - {% arguments name="RemoveFormFields" /%}{% batch datatype="array" /%} - The removeFormFields property in API allows you to exclude specific form fields from a document before sending it. You provide a string array with the IDs of the existing form fields you want to remove. One or more values can be specified. --- - {% arguments name="EnableAuditTrailLocalization" /%}{% batch datatype="boolean" /%} - Enable localization for audit trail based on the signer's language. If `null` is provided, the value will be inherited from the Business Profile settings. Only one additional language can be specified in the signer's languages besides English. --- - {% arguments name="DownloadFileName" /%}{% batch datatype="string" /%} - Defines the custom format for the file name of downloaded document files. You can combine your own file name elements with the following predefined dynamic variables: - `title` - `documentId` - `signername` - `signername_last` - `signername_order#1` - `sendername` - `completeddate` - `status` The `#1` in `signername_order#1` serves as a placeholder and should be replaced with an actual value, such as `signername_order#3`, to represent a 3rd signer's name. The maximum file name length is 250 characters. If the generated name exceeds this limit, it will be truncated to fit within the limit. This property is optional; if not provided, the default format configured in the business profile will be used. --- - {% arguments name="AllowedSignatureTypes" /%}{% batch datatype="array" /%} - Defines the signature input options available to the signer during the signing process. This property customizes the signature and initial field dialog by controlling which signature input methods are shown to the signer. The available signature types are: `Text`, `Draw`, and `Image`. --- - {% arguments name="ScheduledSendTime" /%}{% batch datatype="long" /%} - This property allows you to specify the date and time in Unix Timestamp format to schedule a document for sending at a future time. The scheduled time must be at least 30 minutes from the current time and must not exceed the document’s expiry date. --- - {% arguments name="EnableAllowSignEverywhere" /%}{% batch datatype="Nullable boolean" /%} - This property allows you to define whether all signature form fields on the signing page should use the same signature value applied by the signer. If this property is not specified, the signature values will be inherited from the business profile configuration. --- - {% arguments name="GroupSignerSettings" /%}{% batch datatype="object" /%} - Configures whether contact groups can be used as signers for this document, and restricts which contact groups are allowed. {% nestedtable %} - {% arguments name="Enabled" /%}{% batch datatype="boolean" /%} - When set to `true`, contact groups can be used as signers. --- - {% arguments name="AllowedDirectories" /%}{% batch datatype="array" /%} - The list of allowed directory values. Only contact groups assigned to one of these directories can be used as signers. {% /nestedtable %} {% /nestedtable %} **Notes:** 1. Please note that you must use either the `fileUrls` or `files` parameter in a request, both cannot be used together. 2. For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ## Example response ***200 Success*** ```json { "documentId": "755195d8-xxxx-xxxx-xxxx-88ff77d35419" } ``` --- # File: documents\send-document-on-behalf.md # On behalf of In BoldSign, you can perform several operations on behalf of another user. For this, you should add that user as your sender identity, and that user should approve your request. Once this is done, you can perform the actions like sending documents, downloading the audit log, revoking, reminding, changing the access code, etc. The documents you sent on behalf of another user will be displayed under the `Behalf Documents` section in the BoldSign application. For more information, please refer to the {% customlink href="/sender-identities/create-identity/" text="Sender Identities" /%} article. ## Asynchronous processing Learn more about asynchronous processing in the following section: {% customlink href="/documents/send-document/#asynchronous-document-processing" text="Document Asynchronous processing" /%} ## Document not found Learn more about document not found in the following section: {% customlink href="/documents/send-document/#document-not-found" text="Document not found" /%} ## Send document on-behalf {% post /%} {% path text="/v1/document/send " /%} You can send documents to the signer on behalf of another user. When you send a document on behalf of another person, you will need to provide their email address in the `onBehalfOf` property. This API supports both `multipart/form-data` and `application/json` content types. ### Code snippet using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DisableExpiryAlert=false' \ -F 'ReminderSettings.ReminderDays=3' \ -F 'BrandId=' \ -F 'ReminderSettings.ReminderCount=5' \ -F 'EnableReassign=true' \ -F 'Message=Please sign this.' \ -F 'Signers={ "Name": "David", "EmailAddress": "david@cubeflakes.com", "FormFields": [ { "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 100, "Y": 100, "Width": 100, "Height": 50 }, "IsRequired": true } ] }' \ -F 'ExpiryDays=10' \ -F 'EnablePrintAndSign=false' \ -F 'AutoDetectFields=false' \ -F 'OnBehalfOf=luthercooper@cubeflakes.com' \ -F 'EnableSigningOrder=false' \ -F 'UseTextTags=false' \ -F 'SendLinkValidTill=' \ -F 'Files=@agreement.pdf;type=application/pdf' \ -F 'Title=Agreement' \ -F 'HideDocumentId=false' \ -F 'EnableEmbeddedSigning=false' \ -F 'ExpiryDateType=Days' \ -F 'ReminderSettings.EnableAutoReminder=false' \ -F 'ExpiryValue=60' \ -F 'DisableEmails=false' \ -F 'DisableSMS=false' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); List formField = new List { new FormField( id: "Signature", type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)) }; var documentDetails = new SendForSign { Title = "Agreement", Signers = new List { new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formField) }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", FilePath = "YOUR_FILE_PATH", } }, OnBehalfOf = "luthercooper@cubeflakes.com" }; var documentCreated = documentClient.SendDocument(documentDetails); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) form_field = boldsign.FormField( fieldType="Signature", pageNumber=1, bounds=boldsign.Rectangle(x=50, y=50, width=200, height=25)) document_signer = boldsign.DocumentSigner( name="David", emailAddress="david@cubeflakes.com", signerType="Signer", formFields=[form_field]) send_for_sign = boldsign.SendForSign( title="Agreement", files=["YOUR_FILE_PATH"], signers=[document_signer], onBehalfOf="luthercooper@cubeflakes.com") document_created = document_api.send_document(send_for_sign) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $form_field = new FormField(); $form_field->setFieldType('Signature'); $form_field->setPageNumber(1); $bounds = new Rectangle([100, 100, 100, 50]); $form_field->setBounds($bounds); $document_signer = new DocumentSigner(); $document_signer->setName('David'); $document_signer->setEmailAddress('david@cubeflakes.com'); $document_signer->setSignerType('Signer'); $document_signer->setFormFields([$form_field]); $send_for_sign = new SendForSign(); $files = new FileInfo(); $files = 'YOUR_FILE_PATH'; $send_for_sign->setFiles([$files]); $send_for_sign->setSigners([$document_signer]); $send_for_sign->setOnBehalfOf('luthercooper@cubeflakes.com'); $send_for_sign->setTitle('Document sdk api'); $document_created = $document_api->sendDocument($send_for_sign); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); FormField signatureField = new FormField(); signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE); signatureField.setPageNumber(1); Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f); signatureField.setBounds(bounds); DocumentSigner signer = new DocumentSigner(); signer.setName("David"); signer.setEmailAddress("david@cubeflakes.com"); signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER); signer.setFormFields(Arrays.asList(signatureField)); SendForSign sendForSign = new SendForSign(); File file = new File("YOUR_FILE_PATH"); sendForSign.setFiles(Arrays.asList(file)); sendForSign.setSigners(Arrays.asList(signer)); sendForSign.setOnBehalfOf("luthercooper@cubeflakes.com"); sendForSign.setTitle("Document SDK API"); DocumentCreated documentCreated = documentApi.sendDocument(sendForSign); ``` NodeJS ```js import { DocumentApi, FormField, Rectangle, DocumentSigner, SendForSign } from "boldsign"; import * as fs from 'fs'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 50; bounds.y = 50; bounds.width = 200; bounds.height = 25; const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; formField.bounds = bounds; const documentSigner = new DocumentSigner(); documentSigner.name = "David"; documentSigner.emailAddress = "david@cubeflakes.com"; documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer; documentSigner.formFields = [formField]; const files = fs.createReadStream("YOUR_FILE_PATH"); const sendForSign = new SendForSign(); sendForSign.title = "SDK Document Test case"; sendForSign.files = [files]; sendForSign.signers = [documentSigner]; sendForSign.onBehalfOf = "luthercooper@cubeflakes.com"; const documentCreated = documentApi.sendDocument(sendForSign); ``` {% /codetab %} ### Code snippet using application/json {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "DisableExpiryAlert": false, "ReminderSettings": { "ReminderDays": 5, "ReminderCount": 3, "EnableAutoReminder": true }, "BrandId": "", "EnableReassign": true, "Message": "", "Signers": [ { "Name": "Alex", "EmailAddress": "alexgayle@boldsign.dev", "SignerType": "Signer", "FormFields": [ { "Id": "string", "Name": "string", "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 50, "Y": 50, "Width": 125, "Height": 25 }, "IsRequired": true } ], "Locale": "EN" } ], "ExpiryDays": 30, "EnablePrintAndSign": false, "AutoDetectFields": false, "OnBehalfOf": "luthercooper@cubeflakes.com", "EnableSigningOrder": false, "UseTextTags": false, "SendLinkValidTill": "", "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Sampledocument", "HideDocumentId": false, "EnableEmbeddedSigning": false, "ExpiryDateType": "Days", "ExpiryValue": 60, "DisableEmails": false, "DisableSMS": false }' ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="Files" /%}{% batch datatype="array" /%} - The files to be uploaded for sending signature request. `.pdf,` `.png,` `.jpg,` `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf.` You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. For a single file with file name, the Base64 format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content}}", "fileName": "{{fileName}}" }]`. For multiple files with file name, the format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content1}}", "fileName": "{{fileName}}" }, {...}]`. --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - This is the title of the document that will be displayed in the BoldSign user interface as well as in the signature request email. --- - {% arguments name="Message" /%}{% batch datatype="string" /%} - A message for all the recipients. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Signers" /%}{% batch datatype="array" /%} - Details of the signers. One or more signers can be specified. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the signer. This name will appear on all the emails, notifications, and audit files. --- - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Mail ID of the signer. This ID will appear on all the emails, notifications, and audit files. --- - {% arguments name="PrivateMessage" /%}{% batch datatype="string" /%} - When the specified signer proceeds to sign the document, a message appears. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="string" /%} - This is used to allow authentication for a specific signer. We have three types of authentication. They are `AccessCode`, `EmailOTP`, `SMSOTP` and `IdVerification`. The default value is `None`. --- - {% arguments name="AuthenticationCode" /%}{% batch datatype="string" /%} - The authentication access code that the signer must enter to access the document. This should be shared with the signer. --- - {% arguments name="EnableEmailOTP" /%}{% batch datatype="boolean" /%} - Enables the email OTP authentication. when this feature is enabled, the signer must enter the OTP received via email, to access the document. --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When you set the authentication type to `SMSOTP` or select the delivery mode as `SMS` or `EmailAndSMS`, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature. After which, they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. Maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable int" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="DeliveryMode" /%}{% batch datatype="string" /%} - This property allows you to specify the desired delivery mode for sending notifications. We have three types of delivery modes. They are `Email` , `SMS` and `EmailAndSMS`. The default value is `Email`. --- - {% arguments name="SignerType" /%}{% batch datatype="SignerType" /%} - Type of the signer. The values are `Signer,` `Reviewer,` and `InPersonSigner.` --- - {% arguments name="SignType" /%}{% batch datatype="enum" /%} - Specifies whether the recipient is an individual signer (`Single`) or a contact group signer (`Group`). If not specified, it defaults to `Single`. --- - {% arguments name="GroupId" /%}{% batch datatype="string" /%} - The identifier of the contact group to be used as the signer. You can obtain it from the Contact Groups API. --- - {% arguments name="HostEmail" /%}{% batch datatype="string" /%} - Mail ID of the host. It is applicable when the signerType is set to `InPersonSigner`. --- - {% arguments name="SignerRole" /%}{% batch datatype="string" /%} - The role of the signer, which was specified while creating the template. --- - {% arguments name="AllowFieldConfiguration" /%}{% batch datatype="boolean" /%} - This option enables the signer to add fields at their end while signing the document. If this option is set to `false`, the signer cannot add fields, and they must complete the assigned ones. By default, it is set to false. --- - {% arguments name="FormFields" /%}{% batch datatype="array" /%} - List of form fields associated with the signer. {% nestedtable %} - {% arguments name="Id" /%}{% batch datatype="string" /%} - The id of the form field. ID must start with a letter or an underscore and can only contain letters, digits, and underscores. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the form field. --- - {% arguments name="Type" /%}{% batch datatype="string" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="PageNumber" /%}{% batch datatype="integer" /%} - Page number in the document, in which the form field has to be placed. The page number must be greater than zero. --- - {% arguments name="Bounds" /%}{% batch datatype="Rectangle" /%} - Position and size values of the form field to be placed. {% nestedtable %} - {% arguments name="X" /%}{% batch datatype="float" /%} - X-coordinate value to place the form field. --- - {% arguments name="Y" /%}{% batch datatype="float" /%} - Y-coordinate value to place the form field. --- - {% arguments name="Width" /%}{% batch datatype="float" /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - Height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. The default size font is **13.0** . --- - {% arguments name="Font " /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica`, ` TimesNewRoman` and `NotoSans`. The default font family is `Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be a hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the `fieldType` is set to `RadioButton.` --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text to be displayed in the textbox form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="string" /%} - Type of validation for the textbox form field. The values are `Only Numbers`, `Regex`, `Currency`, `Email` and `None`. The default validation type is `None` . --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the `validationType` is set to `Regex`. --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the textbox form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that are allowed to upload on the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that are allowed to upload on the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFomat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate " /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the editable date form field. When `null` is provided, the value is set to `none`. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:10 PM) - `h:mm:ss tt` (2:45:20 PM) - `HH:mm:ss` (14:30:20) - `H:mm:ss` (9:15:10) - `None` (Disabled, no time will be displayed) {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values that have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} --- - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Index of the language, in which the document signing pages and emails for the signer should render. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` The default language is `1-English` . --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} --- - {% arguments name="CC" /%}{% batch datatype="array" /%} - Mail ID of the CC recipients. One or more CC recipients can be specified. {% nestedtable %} - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Mail ID of the CC recipients. {% /nestedtable %} --- - {% arguments name="EnableSigningOrder" /%}{% batch datatype="boolean " /%} - Enables or disables the signing order. When enabled, signers must sign the document in the specified order and cannot sign in parallel. The default value is `false.` --- - {% arguments name="ExpiryDays" /%}{% batch datatype="integer" /%} - The number of days after which the document expires. The default value is `60` days. --- - {% arguments name="ReminderSettings.EnableAutoReminder" /%}{% batch datatype="boolean" /%} - Enables or disables the auto-reminder. --- - {% arguments name="ReminderSettings.ReminderDays" /%}{% batch datatype="integer" /%} - The number of days between each automatic reminder. --- - {% arguments name="ReminderSettings.ReminderCount" /%}{% batch datatype="integer" /%} - The number of times the auto-reminder should be sent. --- - {% arguments name="DisableEmails" /%}{% batch datatype="boolean" /%} - Disables the sending of document related emails to all the recipients. The default value is `false`. --- - {% arguments name="DisableSMS" /%}{% batch datatype="boolean" /%} - Disables the sending of document related SMS to all the recipients. The default value is `false`. --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - You can customize the logo, colors, and other elements of the signature request emails and document signing pages to match your company branding. The ID of the existing brand can be obtained from the branding API and from the web app. --- - {% arguments name="HideDocumentId" /%}{% batch datatype="boolean" /%} - Decides whether the document ID should be hidden or not. --- - {% arguments name="Labels" /%}{% batch datatype="array" /%} - Labels (tags) are added to the document to categorize and filter the documents. One or more labels can be added. Labels cannot contain whitespaces and must not exceed 255 characters. --- - {% arguments name="FileUrls" /%}{% batch datatype="array" /%} - The URL of the file must be publicly accessible. `.pdf`, `.png`, `.jpg`, `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf.` You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. --- - {% arguments name="SendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="UseTextTags" /%}{% batch datatype="Boolean" /%} - When enabled, it will convert all the tags defined in the document to BoldSign form fields. The default value is `false`. --- - {% arguments name="TextTagDefinitions" /%}{% batch datatype="array" /%} - This can be used for long text tag handling. {% nestedtable %} - {% arguments name="DefinitionId" /%}{% batch datatype="string" /%} - The definition id of the text tag. --- - {% arguments name="Type" /%}{% batch datatype="FieldType" /%} - The type of the form field. --- - {% arguments name="SignerIndex" /%}{% batch datatype="integer" /%} - The signer index of the form field. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - When disabled, the signer is not required to fill out the specific form field. The default value is `true.` --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - The placeholder of the form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="FieldId" /%}{% batch datatype="string" /%} - The field id of the form field. --- - {% arguments name="Font" /%}{% batch datatype="object" /%} - The font of the form field. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="FontFamily" /%} - Font family. The values are `Courier`, `Helvetica`, ` TimesNewRoman` and `NotoSans`. The default font family is `Helvetica`. --- - {% arguments name="Color" /%}{% batch datatype="string" /%} - Color of the font. --- - {% arguments name="Size" /%}{% batch datatype="Nullable float" /%} - Size of the font. --- - {% arguments name="Style" /%}{% batch datatype="FontStyle" /%} - Style of the font. The values are `Regular`, `Bold`, `Italic` and `Underline`. The default font style is `Regular`. --- - {% arguments name="LineHeight" /%}{% batch datatype="Nullable int" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. {% /nestedtable %} --- - {% arguments name="Validation" /%}{% batch datatype="object" /%} - When we select the type as `TextBox,` the validation of the form field is required. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - The validation type of the textbox form field. The available values are `None,` `NumbersOnly,` `EmailAddress,` `Currency,` and `CustomRegex.` The default value is `None.` --- - {% arguments name="Regex" /%}{% batch datatype="string" /%} - The custom regex of the textbox form field. When we set the `ValidationType` to `CustomRegex`, it will be required. --- - {% arguments name="RegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box field. {% /nestedtable %} --- - {% arguments name="Size" /%}{% batch datatype="object" /%} - This can be used to specify the form field's height and width. {% nestedtable %} - {% arguments name="Width" /%}{% batch datatype="float" /%} - The width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - The height of the form field. The height must be greater than zero. {% /nestedtable %} --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="RadioGroupName" /%}{% batch datatype="string" /%} - The form field's group name, which is required when we set the type as `RadioButton`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - The value of the form field. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The options of the dropdown form field. --- - {% arguments name="OffSet" /%}{% batch datatype="object" /%} - Specifies the offset positioning for the text tag, allowing adjustments to its location relative to the computed position. The computed value after value must remain within the page dimensions. {% nestedtable %} - {% arguments name="OffSetX" /%}{% batch datatype="double" /%} - Adjusts the text tag's position horizontally (left or right). --- - {% arguments name="OffSetY" /%}{% batch datatype="double" /%} - Adjusts the text tag's position vertically (top or bottom). {% /nestedtable %} --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox fields to sync them. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. {% /nestedtable %} --- - {% arguments name="EnablePrintAndSign" /%}{% batch datatype="boolean" /%} - Allows the signer to reassign the signature request to another person. The default value is `true`. --- - {% arguments name="DisableExpiryAlert" /%}{% batch datatype="array" /%} - Disables the alert, which was shown one day before the expiry of the document. --- - {% arguments name="FormGroups" /%}{% batch datatype="array" /%} - Manages the rules and configuration of grouped form fields. {% nestedtable %} - {% arguments name="MinimumCount" /%}{% batch datatype="integer" /%} - The minimum number of items that must be selected in a form group. The minimum count value must be greater than zero. --- - {% arguments name="MaximumCount" /%}{% batch datatype="integer" /%} - The maximum number of items that must be selected in a form group. The maximum count value must be greater than zero. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The data sync tag of the form group. --- - {% arguments name="GroupNames" /%}{% batch datatype="array" /%} - The group names to which this form group rule should be applied. --- - {% arguments name="GroupValidation" /%}{% batch datatype="string" /%} - Specify the form group validation type, the available validations are `Minimum`, `Maximum`, `Absolute`, and `Range`. {% /nestedtable %} --- - {% arguments name="DocumentInfo" /%}{% batch datatype="array" /%} - Options to customize the information, like the title and description of the document for a particular signer. {% nestedtable %} - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` The default language is `1-English` . --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the document. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - A message for the signer. You can include the instructions that the signer should know before signing the document. {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Mail ID of the user to send the document on behalf of them. --- - {% arguments name="EnableAuditTrailLocalization" /%}{% batch datatype="boolean" /%} - Enable localization for audit trail based on the signer's language. If `null` is provided, the value will be inherited from the Business Profile settings. Only one additional language can be specified in the signer's languages besides English. --- - {% arguments name="DownloadFileName" /%}{% batch datatype="string" /%} - Defines the custom format for the file name of downloaded document files. You can combine your own file name elements with the following predefined dynamic variables: - `title` - `documentId` - `signername` - `signername_last` - `signername_order#1` - `sendername` - `completeddate` - `status` The `#1` in `signername_order#1` serves as a placeholder and should be replaced with an actual value, such as `signername_order#3`, to represent a 3rd signer's name. The maximum file name length is 250 characters. If the generated name exceeds this limit, it will be truncated to fit within the limit. This property is optional; if not provided, the default format configured in the business profile will be used. --- - {% arguments name="GroupSignerSettings" /%}{% batch datatype="object" /%} - Configures whether contact groups can be used as signers for this document, and restricts which contact groups are allowed. {% nestedtable %} - {% arguments name="Enabled" /%}{% batch datatype="boolean" /%} - When set to `true`, contact groups can be used as signers. --- - {% arguments name="AllowedDirectories" /%}{% batch datatype="array" /%} - The list of allowed directory values. Only contact groups assigned to one of these directories can be used as signers. {% /nestedtable %} {% /nestedtable %} **Notes:** 1. Please note that you must use either the `fileUrls` or `files` parameter in a request, both cannot be used together. 2. For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ### Example response ***201 Created*** ```json { "documentId": "8f59295d-xxxx-xxxx-xxxx-e7dc88cfff2c" } ``` --- # File: documents\send-document-using-multiple-templates.md # Send document using multiple templates {% post /%} {% path text="/v1/template/mergeAndSend" /%} Templates play a pivotal role in enhancing your document management workflow. Users can merge one or more templates into a single document. This merge template process takes an array of template IDs as input and performs a series of checks and operations to seamlessly merge the templates into a finalized document. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/mergeAndSend' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "TemplateIds": [ "1a62a39c-xxxx-xxxx-xxxx-c0a09ee3fc82", "01c19aef-xxxx-xxxx-xxxx-7178ef2e1036" ], "Title": "Invitation form", "Message": "Kindly review and sign this.", "Roles": [ { "RoleIndex": 50, "SignerName": "Richard", "SignerOrder": 1, "SignerEmail": "richard@cubeflakes.com", "PrivateMessage": "Please check and sign the document.", "AuthenticationCode": "281028", "EnableEmailOTP": false, "SignerType": "Signer", "SignerRole": "Manager", "FormFields": [ { "Id": "SignField", "FieldType": "Signature", "PageNumber": 1, "Bounds": { "X": 100, "Y": 100, "Width": 100, "Height": 50 }, "IsRequired": true } ], "Locale": "EN" } ], "BrandId": "8208b6d3-xxxx-xxxx-xxxx-1bbe41018107", "Labels": [ "Invitation" ], "DisableEmails": false, "DisableSMS": false, "HideDocumentId": true, "ReminderSettings": { "EnableAutoReminder": true, "ReminderDays": 3, "ReminderCount": 10 }, "CC": [ { "EmailAddress": "alexgayle@cubeflakes.com" } ], "ExpiryDays": 180, "ExpiryDateType": "Days", "ExpiryValue": 60, "DisableExpiryAlert": true, "EnablePrintAndSign": true, "EnableReassign": true, "EnableSigningOrder": true, "RoleRemovalIndices": [1, 2], "DownloadFileName": "Test-document-from-{sendername}", "useTextTags": false }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var mergeAndSendForSign = new MergeAndSendForSign { TemplateIds = new string[] {"YOUR_TEMPLATE_ID", "YOUR_TEMPLATE_ID"}, Roles = [ new Roles() { RoleIndex = 1, SignerName = "David", SignerEmail = "david@cubeflakes.com", SignerRole = "NewRole" } ] }; var documentCreated = templateClient.MergeAndSend(mergeAndSendForSign); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) role = boldsign.Role( signerRole="NewRole", roleIndex=1, signerName="David", signerEmail="david@cubeflakes.com") merge_and_send_for_sign_form = boldsign.MergeAndSendForSignForm( templateIds=["YOUR_TEMPLATE_ID", "YOUR_TEMPLATE_ID"], roles=[role]) document_created = template_api.merge_and_send(merge_and_send_for_sign_form) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $role = new Role(); $role->setRoleIndex(1); $role->setSignerName('David'); $role->setSignerEmail('david@cubeflakes.com'); $role->setSignerRole('NewRole'); $merge_and_send_for_sign_form = new MergeAndSendForSignForm(); $merge_and_send_for_sign_form->setTemplateIds(['YOUR_TEMPLATE_ID', 'YOUR_TEMPLATE_ID']); $merge_and_send_for_sign_form->setRoles([$role]); $document_created = $template_api->mergeAndSend($merge_and_send_for_sign_form); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); Role role = new Role(); role.setRoleIndex(1); role.setSignerName("David"); role.setSignerEmail("david@cubeflakes.com"); role.setSignerRole("HR"); MergeAndSendForSignForm mergeAndSendForSignForm = new MergeAndSendForSignForm(); mergeAndSendForSignForm.setTemplateIds(Arrays.asList("YOUR_TEMPLATE_ID", "YOUR_TEMPLATE_ID")); mergeAndSendForSignForm.setRoles(Arrays.asList(role)); templateApi.mergeAndSend(mergeAndSendForSignForm); ``` NodeJS ```js import { TemplateApi, FormField, MergeAndSendForSignForm, Rectangle, Role } from "boldsign"; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const role = new Role(); role.roleIndex = 1; role.signerName = "David"; role.signerEmail = "david@cubeflakes.com"; role.signerRole = "Manager"; const mergeAndSendForsign = new MergeAndSendForSignForm(); mergeAndSendForsign.roles = [role]; mergeAndSendForsign.templateIds = ["YOUR_TEMPLATE_ID", "YOUR_TEMPLATE_ID"]; const documentCreated = templateApi.mergeAndSend(mergeAndSendForsign); ``` {% /codetab %} ## Request body {% nestedtable %} - {% arguments name="TemplateIds" /%}{% batch datatype="array" /%} - This is the templateIds of the existing templates to be used for sending the document. One or more values can be specified. --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - This is the title of the document that will be displayed in the BoldSign user interface as well as in the signature request email. --- - {% arguments name="Message" /%}{% batch datatype="string" /%} - A message for all the recipients. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Roles" /%}{% batch datatype="array" /%} - A role is simply a placeholder for a real person. For example, if we have a purchase order that will always be signed by two people, one from the company and one from the customer, we can create a template with two roles, `Customer` and `Representative.` {% nestedtable %} - {% arguments name="RoleIndex" /%}{% batch datatype="integer" /%}{% required /%} - The `roleIndex` represents the position of a role in a sequence. The role index should be in linear increments for each role (1, 2, 3, and so on). The index value must be between 1 and 50. {% arguments name="Example:" /%} When merging templates, the role index follows a linear progression. In the first template, the role index starts naturally. In the second template, the role index begins from the next value after the sum of the roles used in the first template. For the third template, the role index starts from the next value after the sum of the roles used in the first and second templates, and so on. --- - {% arguments name="SignerName" /%}{% batch datatype="string" /%} - Name of the signer. This name will appear on all the emails, notifications, and audit files. --- - {% arguments name="SignerOrder" /%}{% batch datatype="integer" /%} - Signing order of the signer. This is applicable when the signing order option is enabled. --- - {% arguments name="SignerEmail" /%}{% batch datatype="string" /%} - Mail ID of the signer. This ID will appear on all the emails, notifications, and audit files. --- - {% arguments name="HostEmail" /%}{% batch datatype="string" /%} - Mail ID of the host. It is applicable when the signerType is set to `InPersonSigner.` --- - {% arguments name="PrivateMessage" /%}{% batch datatype="string" /%} - Displays a message to the specified signer when he proceeds to sign the document. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="AuthenticationType" /%}{% batch datatype="string" /%} - This is used to allow authentication for a specific signer. We have three types of authentication. They are `AccessCode`, `EmailOTP`, `SMSOTP` and `IdVerification`. The default value is `None.` --- - {% arguments name="AuthenticationCode" /%}{% batch datatype="string" /%} - The authentication access code that the signer must enter to access the document. This should be shared with the signer. --- - {% arguments name="EnableEmailOTP" /%}{% batch datatype="boolean" /%} - Enables the email OTP authentication. when this feature is enabled, the signer must enter the OTP received via email, to access the document. --- - {% arguments name="PhoneNumber" /%}{% batch datatype="object" /%} - When you set the authentication type to `SMSOTP` or select the delivery mode as `SMS` or `EmailAndSMS`, you can provide the phone number with the country code. {% nestedtable %} - {% arguments name="CountryCode" /%}{% batch datatype="string" /%} - This property represents the country code associated with the phone number. --- - {% arguments name="Number" /%}{% batch datatype="string" /%} - This property represents the actual phone number. {% /nestedtable %} --- - {% arguments name="IdentityVerificationSettings" /%}{% batch datatype="object" /%} - Settings for identity verification when `IdVerification` authentication type is enabled for the signer. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - Customize the frequency of identity verification for signers accessing documents. - **EveryAccess**: Signers must undergo identity verification each time they access the document, even after completing their signature. - **UntilSignCompleted**: Identity verification is required until the signer completes their signature. After which, they will not need to undergo identity verification again. - **OncePerDocument**: Signers authenticate their identity only once, even if accessing the document multiple times. --- - {% arguments name="MaximumRetryCount" /%}{% batch datatype="integer" /%} - Specify the maximum number of verification attempts allowed for signers. Exceeding this limit restricts access to the document. Senders have the option to reset failed signers for additional attempts and manually review failed document uploads for approval or rejection. Maximum number of retries is 10. --- - {% arguments name="RequireLiveCapture" /%}{% batch datatype="boolean" /%} - Mandate signers to capture a live image of their identification document using their device camera. This verifies the document's authenticity and originality, preventing the use of photos or photocopies. --- - {% arguments name="RequireMatchingSelfie" /%}{% batch datatype="boolean" /%} - Uses advanced machine learning algorithms to ensure facial recognition accuracy, preventing the use of stolen identity documents by comparing the photo on the ID and the selfie image. --- - {% arguments name="NameMatcher" /%}{% batch datatype="string" /%} - Define the tolerance level for matching the signer's name with the name on the uploaded identification document. Options include: - **Strict**: Minimal variations are permitted, adhering to strict matching rules. - **Moderate**: Moderate matching rules allow for variations in the middle, prefix, and suffix parts of the name. - **Lenient**: Relaxed matching rules accommodate minor spelling mistakes for increased flexibility. --- - {% arguments name="HoldForPrefill" /%}{% batch datatype="boolean" /%} - Enable this option to hold the signer from signing the document, giving you the opportunity to prefill the signer's details. Once the prefill is completed, the signer can proceed with the signing process. The maximum hold time is 30 seconds; if you exceed this time limit, the signer will be redirected to the signing page. --- - {% arguments name="AllowedDocumentTypes" /%}{% batch datatype="array" /%} - Defines the list of document types from which the signer can upload any one as an identification document. The allowed types are `Passport`, `IDCard`, and `DriverLicense`. {% /nestedtable %} --- - {% arguments name="AuthenticationRetryCount" /%}{% batch datatype="Nullable int" /%} - Specifies the maximum number of allowed authentication attempts for the signer during the signing process. This applies to the following authentication methods: - `AccessCode` - `EmailOTP` - `SMSOTP` The retry count must be an integer between `1` and `10`. If this property is not specified, the value configured in the business profile will be used automatically. You can learn how to set it [here](https://support.boldsign.com/kb/article/19693/how-to-set-authentication-retry-attempts-in-boldsign). This property is optional. --- - {% arguments name="DeliveryMode" /%}{% batch datatype="string" /%} - This property allows you to specify the desired delivery mode for sending notifications. We have three types of delivery modes. They are `Email` , `SMS` and `EmailAndSMS`. The default value is `Email`. --- - {% arguments name="SignerType" /%}{% batch datatype="SignerType" /%} - Type of the signer. The values are `Signer,` `Reviewer,` and `InPersonSigner.` --- - {% arguments name="SignType" /%}{% batch datatype="enum" /%} - Specifies whether the recipient is an individual signer (`Single`) or a contact group signer (`Group`). If not specified, it defaults to `Single`. --- - {% arguments name="GroupId" /%}{% batch datatype="string" /%} - The identifier of the contact group to be used as the signer. You can obtain it from the Contact Groups API. --- - {% arguments name="SignerRole" /%}{% batch datatype="string" /%} - The role of the signer, which was specified while creating the template. --- - {% arguments name="AllowFieldConfiguration" /%}{% batch datatype="boolean" /%} - This option enables the signer to add fields at their end while signing the document. If this option is set to `false`, the signer cannot add fields, and they must complete the assigned ones. By default, it is set to false. --- - {% arguments name="FormFields" /%}{% batch datatype="array" /%} - List of form fields associated with the signer. {% nestedtable %} - {% arguments name="Id" /%}{% batch datatype="string" /%} - The id of the form field. ID must start with a letter or an underscore and can only contain letters, digits, and underscores. --- - {% arguments name="Name" /%}{% batch datatype="string" /%} - Name of the form field. --- - {% arguments name="Type" /%}{% batch datatype="string" /%} - Type of the form field. The available values are `Signature`, `Initial`, `CheckBox`, `TextBox`, `Label`, `DateSigned`, `Image`, `Attachment`, `EditableDate`, `Hyperlink`, `Formula`, `Dropdown` and `Drawing`. The `Formula` field is only available in the beta version. **Note:** To add `Email`, `Name`, `Title`, and `Company` fields via API, use `TextBox` fields with the validation type set to `Regex` . --- - {% arguments name="PageNumber" /%}{% batch datatype="integer" /%} - Page number in the document in which the form field has to be placed. The page number must be greater than zero. --- - {% arguments name="Bounds" /%}{% batch datatype="Rectangle" /%} - Position and size values of the form field to be placed. {% nestedtable %} - {% arguments name="X" /%}{% batch datatype="float" /%} - X-coordinate value to place the form field. --- - {% arguments name="Y" /%}{% batch datatype="float" /%} - Y-coordinate value to place the form field. --- - {% arguments name="Width" /%}{% batch datatype="float" /%} - Width of the form field. The width must be greater than zero. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - Height of the form field. The default line height is **15.0** . {% /nestedtable %} --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - Decides whether this form field is required to be filled or not. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="Label" /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value to be displayed on the label form field. --- - {% arguments name="FontSize" /%}{% batch datatype="float" /%} - Size of the font. --- - {% arguments name="Font" /%}{% batch datatype="string" /%} - Font family. The values are `Courier`, `Helvetica`, ` TimesNewRoman` and `NotoSans`. The default font family is `Helvetica`. --- - {% arguments name="FontHexColor" /%}{% batch datatype="string" /%} - Color of the font. The value should be hex color code. Example - `#035efc`. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. --- - {% arguments name="LineHeight" /%}{% batch datatype="integer" /%} - Height of a line in the text. The default line height is **15.0** . --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. --- - {% arguments name="GroupName" /%}{% batch datatype="string" /%} - The group name of the form field. This field is required when the type is set to `RadioButton.` --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - A hint text is to be displayed on the text form field by default. --- - {% arguments name="ValidationType" /%}{% batch datatype="ValidationType" /%} - Type of validation for the textbox form field. The values are `Only Numbers,` `Regex,` `Currency,` `Email,` and `None.`. The default validation type is `None` . --- - {% arguments name="ValidationCustomRegex" /%}{% batch datatype="string" /%} - Value for regex validation. This is applicable when the validationType is set to `Regex.` --- - {% arguments name="ValidationCustomRegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the textbox form field. --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `MM/dd/yyyy` (02/08/2024) - `dd/MM/yyyy` (08/02/2024) - `dd-MMM-yyyy` (08-Feb-2024) - `MMM-dd-yyyy` (Feb-08-2024) - `MMM dd, yyyy` (Feb 08, 2024) - `dd MMM, yyyy` (08 Feb, 2024) - `yyyy, MMM dd` (2024, Feb 08) - `yyyy/MM/dd` (2024/02/08) - `dd-MM-yyyy` (08-02-2024) - `MM-dd-yyyy` (02-08-2024) - `yyyy-MM-dd` (2024-02-08) --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:15 PM) - `h:mm:ss tt` (2:45:30 PM) - `HH:mm:ss` (14:30:10) - `H:mm:ss` (9:15:40) - `None` (Disabled, no time will be displayed) --- - {% arguments name="ImageInfo" /%}{% batch datatype="object" /%} - Options to customize the image form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the image form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the image form field. --- - {% arguments name="AllowedFileExtensions" /%}{% batch datatype="string" /%} - Controls the image formats that can be uploaded to the image form field. The values are `.jpg` or `.jpeg,` `.svg,` `.png,` and `.bmp.` {% /nestedtable %} --- - {% arguments name="AttachmentInfo" /%}{% batch datatype="object" /%} - Options to customize the attachment form field. {% nestedtable %} - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the attachment form field. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - Description of the attachment form field. --- - {% arguments name="AllowedFileTypes" /%}{% batch datatype="string" /%} - Controls the file formats that can be uploaded to the attachment form field. The values are `PDF,` `Document,` and `Image.` {% /nestedtable %} --- - {% arguments name="EditableDateFieldSettings" /%}{% batch datatype="object" /%} - Options to customize the editable date form field. {% nestedtable %} - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - BoldSign API supports a variety of date-time formats, including: - `MM/dd/yyyy` - `dd/MM/yyyy` - `dd-MMM-yyyy` - `MMM-dd-yyyy` - `MMM dd,yyyy` - `dd MMM,yyyy` - `yyyy,MMM dd` - `yyyy/MM/dd` - `dd-MM-yyyy` - `MM-dd-yyyy` - `yyyy-MM-dd` Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. --- - {% arguments name="MinDate" /%}{% batch datatype="string" /%} - The minimum date that can be selected. The string should be in date-time format. The default ISO standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format minDate : `2024-01-01T00:00:00Z` The date-time should be passed in UTC timezone using Z (e.g., `2024-01-01T00:00:00Z`). If using a specific timezone, provide the UTC offset: - IST (UTC+5:30): `2024-01-01T00:00:00+05:30` - PST (UTC-8:00): `2024-01-01T00:00:00-08:00` --- - {% arguments name="MaxDate" /%}{% batch datatype="string" /%} - The maximum date that can be selected. The string should be in date-time format. The default ISO 8601 standard `YYYY-MM-DDTHH:MM:SSZ`. ##### Example Format maxDate : `2025-12-31T23:59:59Z` Pass the date-time in UTC timezone using Z (e.g., `2025-12-31T23:59:59Z`). For specific timezones, provide the UTC offset: - EST (UTC-5:00): `2025-12-31T23:59:59-05:00` - CET (UTC+1:00): `2025-12-31T23:59:59+01:00` --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the editable date form field. When `null` is provided, the value is set to `none`. Accepted formats are - `hh:mm tt` (12:30 PM) - `h:mm tt` (2:45 PM) - `HH:mm` (14:30) - `H:mm` (9:15) - `hh:mm:ss tt` (12:30:10 PM) - `h:mm:ss tt` (2:45:20 PM) - `HH:mm:ss` (14:30:20) - `H:mm:ss` (9:15:10) - `None` (Disabled, no time will be displayed) {% /nestedtable %} --- - {% arguments name="HyperLinkText" /%}{% batch datatype="string" /%} - Text to be displayed for the hyperlink. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox form fields to sync them. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The values which have to be displayed on the dropdown form field. One or more values can be specified. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="CollaborationSettings" /%}{% batch datatype="object" /%} - Options to configure collaboration settings for form field. {% nestedtable %} - {% arguments name="IsRequired" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether collaborative fields are mandatory for signers collaborating on the document. --- - {% arguments name="RequireSignerApproval" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether signers need to verify and approve the document after collaborators have made changes to the collaborative fields. --- - {% arguments name="RequireInitial" /%}{% batch datatype="Nullable boolean" /%} - This property is used to specify whether the collaborators must fill in their initials when editing collaborative fields. --- - {% arguments name="AllowedSigners" /%}{% batch datatype="String array" /%} - This property is used to specify the list of role indexes who are allowed to collaborate on editing this field. {% /nestedtable %} --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. {% /nestedtable %} --- - {% arguments name="ExistingFormFields" /%}{% batch datatype="array" /%} - List of existing form fields in the document. {% nestedtable %} - {% arguments name="Index" /%}{% batch datatype="integer" /%} - Index of the existing form field. --- - {% arguments name="Id" /%}{% batch datatype="string" /%} - The ID of the existing form field. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - Value of the existing form field. --- - {% arguments name="IsReadOnly" /%}{% batch datatype="boolean" /%} - Decides whether this form field is readOnly or not. --- - {% arguments name="TemplateOrder" /%}{% batch datatype="integer" /%} - Specifies the position of the template instance within the templateIds array. It is used to update the value of an existing form field for a specific template instance. **Note:** Template order starts at 1. {% /nestedtable %} --- - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Index of the language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients by configuring the properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="signatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when a document is edited. {% /nestedtable %} --- - {% arguments name="EnableQes" /%}{% batch datatype="Nullable boolean" /%} - When set to true, the signer will be allowed to sign the document with a qualified electronic signature (QES). It can only be assigned to a single signer. When there are multiple signers in a document, the signer order option should be enabled to ensure only the last person in the document is enabled with QES, and the last signer order also should not have multiple signers. --- - {% arguments name="AuthenticationSettings" /%}{% batch datatype="object" /%} - Configure additional options for signers who are authenticated using Email OTP, SMS OTP, or Access Code. These settings allow you to control how often the signer must authenticate when accessing the document. And it applies only when the signer's `AuthenticationType` is set to `EmailOTP`, `SMSOTP`, or `AccessCode`. For `IdVerification`, use the `IdentityVerificationSettings` property instead. {% nestedtable %} - {% arguments name="AuthenticationFrequency" /%}{% batch datatype="string" /%} - Specifies how frequently the signer must complete authentication: - **EveryAccess**: The signer must authenticate every time they access the document, even after signing. - **UntilSignCompleted**: Authentication is required until the signer completes their signature. After signing, further authentication is not required. - **OncePerDocument**: The signer authenticates only once per document, regardless of how many times they access it. {% /nestedtable %} --- {% /nestedtable %} --- - {% arguments name="BrandId" /%}{% batch datatype="string" /%} - You can customize the logo, colors, and other elements of the signature request emails and document signing pages to match your company branding. The ID of the existing brand can be obtained from the branding API and from the web app. --- - {% arguments name="Labels" /%}{% batch datatype="array" /%} - Labels (tags) are added to the documents to categorize and filter them. One or more labels can be added. Labels cannot contain whitespaces and must not exceed 255 characters. --- - {% arguments name="DisableEmails" /%}{% batch datatype="boolean" /%} - Disables the sending of document related emails to all the recipients. The default value is `false.` --- - {% arguments name="DisableSMS" /%}{% batch datatype="boolean" /%} - Disables the sending of document related SMS to all the recipients. The default value is `false`. --- - {% arguments name="HideDocumentId" /%}{% batch datatype="boolean" /%} - Decides whether the document ID should be hidden or not. --- - {% arguments name="ReminderSettings" /%}{% batch datatype="boolean" /%} - Options to customize the auto reminder settings. {% nestedtable %} - {% arguments name="EnableAutoReminder" /%}{% batch datatype="boolean" /%} - Enables or disables the auto reminder. --- - {% arguments name="ReminderDays" /%}{% batch datatype="integer" /%} - The number of days between each automatic reminder. --- - {% arguments name="ReminderCount" /%}{% batch datatype="integer" /%} - The number of times the auto reminder should be sent. {% /nestedtable %} --- - {% arguments name="CC" /%}{% batch datatype="array" /%} - Mail ID of the CC recipients. One or more CC recipients can be specified. {% nestedtable %} - {% arguments name="EmailAddress" /%}{% batch datatype="string" /%} - Mail ID of the CC recipients. {% /nestedtable %} --- - {% arguments name="ExpiryDays" /%}{% batch datatype="integer" /%} - The number of days after which the document expires. The default value is `60` days. --- - {% arguments name="EnablePrintAndSign" /%}{% batch datatype="boolean" /%} - Allows the signer to print the document, sign, and upload it. The default value is `false.` --- - {% arguments name="EnableReassign" /%}{% batch datatype="boolean" /%} - Allows the signer to reassign the signature request to another person. The default value is `true.` --- - {% arguments name="EnableSigningOrder" /%}{% batch datatype="boolean" /%} - Enables or disables the signing order. If this option is enabled, then the signers can only sign the document in the specified order and cannot sign in parallel. The default value is `false.` --- - {% arguments name="DisableExpiryAlert" /%}{% batch datatype="boolean" /%} - Disables the alert, which was shown one day before the expiry of the document. --- - {% arguments name="DocumentInfo" /%}{% batch datatype="array" /%} - Options to customize the information like title and description of the document for a particular signer. {% nestedtable %} - {% arguments name="Language" /%}{% batch datatype="integer" /%} - Language in which the document signing pages and emails for the signer should be rendered. The supported languages are `1-English,` `2-Spanish,` `3-German,` `4-French,` and `5-Romanian.` Note that 'locale' should now be used instead of 'language' as it has replaced the deprecated term. The default language is `1-English` . --- - {% arguments name="Title" /%}{% batch datatype="string" /%} - Title of the document. --- - {% arguments name="Description" /%}{% batch datatype="string" /%} - A message for the signer. You can include the instructions that the signer should know before signing the document. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - Specify the language index for rendering document signing pages and emails for the signer, choosing from the supported locales such as `EN-English`, `NO-Norwegian`, `FR-French`, `DE-German`,`ES-Spanish`, `BG-Bulgarian`, `CS-Czech`, `DA-Danish`,`IT-Italian`, `NL-Dutch`, `PL-Polish`, `PT-Portuguese`,`RO-Romanian`, `RU-Russian`, `JA-Japanese`, `TH-Thai`, `ZH_CN-Simplified Chinese`, `Zh_TW-Traditional Chinese`, `Korean`, and `SV-Swedish`. The default locale language is `EN-English` . {% /nestedtable %} --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - The email address of the user to create the templates on their behalf. --- - {% arguments name="RoleRemovalIndices" /%}{% batch datatype="array" /%} - Removes the roles present in the template with their indices given in this property. --- - {% arguments name="DocumentDownloadOption" /%}{% batch datatype="enum" /%} - This option allows you to configure how the uploaded files, especially multiple files, should be downloaded: as a single combined document, as separate documents, or based on the user preference. The values are `Combined`, `Individually`, and `UserPreference`. The default value is `Combined`. If the value is `null`, the setting configured in the business profile settings will be considered. --- - {% arguments name="MetaData" /%}{% batch datatype="Dictionary" /%} - Additional information about the document in the form of key-value pairs. Up to 50 key-value pairs can be added. The key is limited to 50 characters, and the value is limited to 500 characters. --- - {% arguments name="RecipientNotificationSettings" /%}{% batch datatype="object" /%} - Control email notifications to recipients or CC collectively by configuring properties within `recipientNotificationSettings`. {% nestedtable %} - {% arguments name="SignatureRequest" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is sent. --- - {% arguments name="Declined" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is declined. --- - {% arguments name="Revoked" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is revoked. --- - {% arguments name="Signed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is signed by other recipient. --- - {% arguments name="Completed" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is completed. --- - {% arguments name="Expired" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document expires. --- - {% arguments name="Reassigned" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is reassigned. --- - {% arguments name="Deleted" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when a document is deleted. --- - {% arguments name="Reminders" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should receive reminders for pending signature requests. --- - {% arguments name="EditRecipient" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient should be notified when there is a change in the recipient. --- - {% arguments name="EditDocument" /%}{% batch datatype="boolean" /%} - Indicates whether the recipient or CC should be notified when the document is edited. --- - {% arguments name="Viewed" /%}{% batch datatype="boolean" /%} - Indicates whether the CC should be notified when the document is viewed. {% /nestedtable %} --- - {% arguments name="RemoveFormFields" /%}{% batch datatype="array" /%} - The removeFormFields property in API allows you to exclude specific form fields from a document before sending it. You provide a string array with the IDs of the existing form fields you want to remove. One or more values can be specified. --- - {% arguments name="EnableAuditTrailLocalization" /%}{% batch datatype="boolean" /%} - Enable localization for audit trail based on the signer's language. If `null` is provided, the value will be inherited from the Business Profile settings. Only one additional language can be specified in the signer's languages besides English. --- - {% arguments name="Files" /%}{% batch datatype="base64" /%} - The files to be uploaded for sending signature request. `.pdf,` `.png,` `.jpg,` `.docx`, `.xlsx` and `.pptx` are supported file formats. The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. For a single file with file name, the Base64 format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content}}", "fileName": "{{fileName}}" }]`. For multiple files with file name, the format should be: `[{ "base64": "data:application/{{fileType}};base64,{{content1}}", "fileName": "{{fileName}}" }, {...}]`. --- - {% arguments name="FileUrls" /%}{% batch datatype="array" /%} - The URL of the file must be publicly accessible. `.pdf`, `.png`, `.jpg`, `.docx`, `.xlsx` and `.pptx` are supported file formats.The preferred file format is `.pdf`. You can upload up to 25 files. Each document may have a maximum of 1000 pages and must be no larger than 25 MB in size. --- - {% arguments name="DownloadFileName" /%}{% batch datatype="string" /%} - Defines the custom format for the file name of downloaded document files. You can combine your own file name elements with the following predefined dynamic variables: - `title` - `documentId` - `signername` - `signername_last` - `signername_order#1` - `sendername` - `completeddate` - `status` The `#1` in `signername_order#1` serves as a placeholder and should be replaced with an actual value, such as `signername_order#3`, to represent a 3rd signer's name. The maximum file name length is 250 characters. If the generated name exceeds this limit, it will be truncated to fit within the limit. This property is optional; if not provided, the default format configured in the business profile will be used. --- - {% arguments name="AllowedSignatureTypes" /%}{% batch datatype="array" /%} - Defines the signature input options available to the signer during the signing process. This property customizes the signature and initial field dialog by controlling which signature input methods are shown to the signer. The available signature types are: `Text`, `Draw`, and `Image`. --- - {% arguments name="ScheduledSendTime" /%}{% batch datatype="long" /%} - This property allows you to specify the date and time in Unix Timestamp format to schedule a document for sending at a future time. The scheduled time must be at least 30 minutes from the current time and must not exceed the document’s expiry date. --- - {% arguments name="UseTextTags" /%}{% batch datatype="Boolean" /%} - When enabled, it will convert all the tags defined in the document to BoldSign form fields. The default value is `false`. --- - {% arguments name="TextTagDefinitions" /%}{% batch datatype="array" /%} - This can be used for long text tag handling. {% nestedtable %} - {% arguments name="DefinitionId" /%}{% batch datatype="string" /%} - The definition id of the text tag. --- - {% arguments name="Type" /%}{% batch datatype="Type" /%} - The type of the form field. --- - {% arguments name="SignerIndex" /%}{% batch datatype="integer" /%} - The signer index of the form field. --- - {% arguments name="IsRequired" /%}{% batch datatype="boolean" /%} - When disabled, the signer is not required to fill out the specific form field. The default value is `true`. --- - {% arguments name="IsMasked" /%}{% batch datatype="Nullable boolean" /%} - Decides whether this form field should be masked so that its value is hidden from other signers present in the document. --- - {% arguments name="PlaceHolder" /%}{% batch datatype="string" /%} - The placeholder of the form field. --- - {% arguments name="TabIndex" /%}{% batch datatype="Nullable int" /%} - Assign tab index to control the flow of field focus while using `TAB` key navigation. Default to `null`, which denotes it will follow regular flow. The accepted range starts from `-1` to a valid `integer`. --- - {% arguments name="FieldId" /%}{% batch datatype="string" /%} - The field id of the form field. --- - {% arguments name="Font" /%}{% batch datatype="object" /%} - The font of the form field. {% nestedtable %} - {% arguments name="Name" /%}{% batch datatype="FontFamily" /%} - Font family. The values are `Courier`, ` Helvetica`, and ` TimesNewRoman`. --- - {% arguments name="Color" /%}{% batch datatype="string" /%} - Color of the font. The value should be hex color code. Example - `#035efc`. --- - {% arguments name="Size" /%}{% batch datatype="Nullable float" /%} - Size of the font. --- - {% arguments name="Style" /%}{% batch datatype="FontStyle" /%} - Style of the font. The values are `Regular`, `Bold`, `Italic`, and `Underline`. --- - {% arguments name="LineHeight" /%}{% batch datatype="Nullable int" /%} - Height of a line in the text. --- - {% arguments name="IsBoldFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in bold or not. --- - {% arguments name="IsItalicFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be in italic or not. --- - {% arguments name="IsUnderLineFont" /%}{% batch datatype="boolean" /%} - Decides whether the font should be underlined or not. {% /nestedtable %} --- - {% arguments name="Validation" /%}{% batch datatype="object" /%} - When we select the type as `TextBox`, the validation of the form field is required. {% nestedtable %} - {% arguments name="Type" /%}{% batch datatype="string" /%} - The validation type of the text box form field. The available values are `None`, `NumbersOnly`, `EmailAddress`, `Currency`, and `CustomRegex`. The default value is `None`. --- - {% arguments name="Regex" /%}{% batch datatype="string" /%} - The custom regex of the text box form filed. When we set the ValidationType to `CustomRegex`, it will be required. --- - {% arguments name="RegexMessage" /%}{% batch datatype="string" /%} - Description for regex validation. This message is displayed when the signer enters an invalid regex format value in the text box field. {% /nestedtable %} --- - {% arguments name="Size" /%}{% batch datatype="object" /%} - This can be used to specify the form field's height and width. {% nestedtable %} - {% arguments name="Width" /%}{% batch datatype="float" /%} - The width of the form field. --- - {% arguments name="Height" /%}{% batch datatype="float" /%} - The height of the form field. {% /nestedtable %} --- - {% arguments name="DateFormat" /%}{% batch datatype="string" /%} - Format of the date to be displayed on the date signed form field. The default value is `MM/dd/yyyy`. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are `MM/dd/yyyy` (02/08/2024), `dd/MM/yyyy` (08/02/2024), `dd-MMM-yyyy` (08-Feb-2024), `MMM-dd-yyyy` (Feb-08-2024), `MMM dd, yyyy` (Feb 08, 2024), `dd MMM, yyyy` (08 Feb, 2024), `yyyy, MMM dd` (2024, Feb 08), `yyyy/MM/dd` (2024/02/08), `dd-MM-yyyy` (08-02-2024), `MM-dd-yyyy` (02-08-2024), `yyyy-MM-dd` (2024-02-08). --- - {% arguments name="TimeFormat" /%}{% batch datatype="string" /%} - Format of the time to be displayed on the date signed form field. When `null` is provided, the value is inherited from the business profile settings of your account. Accepted formats are `hh:mm tt` (12:30 PM), `h:mm tt` (2:45 PM), `HH:mm` (14:30), `H:mm` (9:15), `hh:mm:ss tt` (12:30:15 PM), `h:mm:ss tt` (2:45:30 PM), `HH:mm:ss` (14:30:10), `H:mm:ss` (9:15:40), `None` (Disabled, no time will be displayed). --- - {% arguments name="RadioGroupName" /%}{% batch datatype="string" /%} - The form field's group name, which is required when we set the type as `RadioButton`. --- - {% arguments name="Value" /%}{% batch datatype="string" /%} - The value of the form field. --- - {% arguments name="DropDownOptions" /%}{% batch datatype="array" /%} - The options of the dropdown form field. --- - {% arguments name="OffSet" /%}{% batch datatype="object" /%} - Specifies the offset positioning for the text tag, allowing adjustments to its location relative to the computed position. The computed value after value must remain within the page dimensions. {% nestedtable %} - {% arguments name="OffSetX" /%}{% batch datatype="double" /%} - Adjusts the text tag's position horizontally (left or right). --- - {% arguments name="OffSetY" /%}{% batch datatype="double" /%} - Adjusts the text tag's position vertically (top or bottom). {% /nestedtable %} --- - {% arguments name="FormulaFieldSettings" /%}{% batch datatype="object" /%} - Options to configure formula field. {% nestedtable %} - {% arguments name="FormulaExpression" /%}{% batch datatype="string" /%} - This property is used to specify the formula as a string define the calculation or expression for the formula field. --- - {% arguments name="DecimalPrecision" /%}{% batch datatype="integer" /%} - This property is used to determines the decimal rounding precision for the computed result. {% /nestedtable %} --- - {% arguments name="Label " /%}{% batch datatype="string" /%} - The label used to represent the value for a radio button. Also, can be used to prefill a radio button. --- - {% arguments name="ResizeOption" /%}{% batch datatype="enum" /%} - Defines how the Textbox form field resizes based on the entered text. The available values are `GrowHorizontally`, `GrowVertically`, `GrowBoth`, `FixedSize`, and `AutoResizeFont`. --- - {% arguments name="DataSyncTag" /%}{% batch datatype="string" /%} - The value that can be specified on two or more textbox fields to sync them. --- - {% arguments name="TextAlign" /%}{% batch datatype="string" /%} - Determines the horizontal alignment of text for the textbox and label form fields, and can be set to `Left`, `Center` or `Right`. The default of alignment of text is `Left`. --- - {% arguments name="TextDirection" /%}{% batch datatype="string" /%} - Determines the text direction of text for the textbox and label form fields, and can be set to `LTR` or `RTL`. The default text direction is `LTR`. --- - {% arguments name="CharacterSpacing" /%}{% batch datatype="float" /%} - Determines the character spacing of text for the textbox and label form fields. It can be set as a floating-point value. --- - {% arguments name="CharacterLimit" /%}{% batch datatype="integer" /%} - Limits the number of characters in the text. The character limit value must be greater than zero. {% /nestedtable %} --- - {% arguments name="EnableAllowSignEverywhere" /%}{% batch datatype="Nullable boolean" /%} - This property allows you to define whether all signature form fields on the signing page should use the same signature value applied by the signer. If this property is not specified, the signature values will be inherited from the business profile configuration. --- - {% arguments name="GroupSignerSettings" /%}{% batch datatype="object" /%} - Configures whether contact groups can be used as signers for this document, and restricts which contact groups are allowed. {% nestedtable %} - {% arguments name="Enabled" /%}{% batch datatype="boolean" /%} - When set to `true`, contact groups can be used as signers. --- - {% arguments name="AllowedDirectories" /%}{% batch datatype="array" /%} - The list of allowed directory values. Only contact groups assigned to one of these directories can be used as signers. {% /nestedtable %} {% /nestedtable %} **Notes:** - When merging multiple templates without enabling a signing order, templates with the same role, email, and name are combined into a single role, and the signing document is then sent to that consolidated role. - When merging multiple templates with a signing order enabled, templates with the same role, email, name, and order are merged into a single role, and the signing document is sent accordingly. - When merging multiple templates and encountering fields with identical names and data types in both templates, if these fields are assigned to the same signer, updating the value of one of these fields using the `existingFormFields` property will automatically reflect the change in both corresponding fields. - Please note that you must use either the `fileUrls` or `files` parameter in a request, both cannot be used together. - For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) ## Example response ***200 Success*** ```json { "documentId": "755195d8-xxxx-xxxx-xxxx-88ff77d35419" } ``` --- # File: documents\send-reminder.md # Send reminders {% post /%} {% path text="/v1/document/remind" /%} A reminder is helpful when you need to remind your signers to sign the document. A reminder email will be sent to the signer. You can send reminders to multiple signers together if more than one signer is needed to sign the same document. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/remind?documentId={documentId}' \ -H 'accept: */*' \ -H 'X-API-KEY: {your-api-key}'\ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "Message": "string", "OnBehalfOf": "string" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); documentClient.RemindDocument( documentId: "YOUR_DOCUMENT_ID", reminderMessage: new ReminderMessage(message: "Please sign this soon")); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) reminder_message = boldsign.ReminderMessage( message="Please sign this soon") document_api.remind_document(document_id="YOUR_DOCUMENT_ID", reminder_message=reminder_message) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $reminder_message = new ReminderMessage(); $reminder_message->setMessage('Please sign this soon'); $document_api->remindDocument($document_id = 'YOUR_DOCUMENT_ID', $receiver_emails = ['david@cubeflakes.com'], $reminder_message); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); ReminderMessage reminderMessage = new ReminderMessage(); reminderMessage.setMessage("Please sign this soon"); documentApi.remindDocument( "YOUR_DOCUMENT_ID", null, reminderMessage); ``` NodeJS ```js import { DocumentApi, ReminderMessage } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const reminderMessage = new ReminderMessage(); reminderMessage.message = "Please sign this soon"; documentApi.remindDocument("YOUR_DOCUMENT_ID", ["david@cubeflakes.com"], reminderMessage); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the document to which the reminder has to be sent. --- - {% arguments name="receiverEmails" /%}{% batch datatype="array" /%} - Mail ID of the signer. Multiple signer IDs can be specified if the signature is requested from multiple signers for the same document. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="Message" /%}{% batch datatype="array" /%} - Message to be sent to the signer to remind them. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="array" /%} - Mail ID of the sender if you are sending reminders to the on behalf of documents. {% /nestedtable %} ## Example response ***204 No Content*** --- # File: documents\update-metadata.md # Update metadata {% put /%} {% path text="/v1-beta/document/updateMetaData" /%} The metadata can be used to store additional information about the document in the form of key-value pairs. Up to 50 key-value pairs can be added. The key is limited to 50 characters, and the value is limited to 500 characters. The stored metadata will be included in the webhooks and document properties API to be retrieved later. ## Code snippet {% codetab %} cURL ```shell curl --location --request PUT 'https://api.boldsign.com/v1-beta/document/updateMetaData?documentId=2f8b6aa7-xxxx-xxxx-xxxx-74edab513999' \ --header 'accept: */*' \ --header 'X-API-KEY: {apikey}' \ --header 'Content-Type: application/json' \ --data '{ "MetaData": { "DocumentType": "new", "DocumentCategory": "software" } }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var documentClient = new DocumentClient(apiClient); var metaData = new Dictionary() { ["DocumentType"] = "new", ["DocumentCategory"] = "software", }; var updateDocumentMetaData = new UpdateDocumentMetaData("2f8b6aa7-xxxx-xxxx-xxxx-74edab513999", metaData); await documentClient.UpdateDocumentMetaDataAsync(updateDocumentMetaData.DocumentId, updateDocumentMetaData); ``` Python ```python import requests url = 'https://api.boldsign.com/v1-beta/document/updateMetaData?documentId=2f8b6aa7-xxxx-xxxx-xxxx-74edab513999' headers = { 'accept': '*/*', 'X-API-KEY': '{apikey}', 'Content-Type': 'application/json' } data = { "metaData": { "DocumentType": "new", "DocumentCategory": "software" } } response = requests.put(url, headers=headers, json=data) ``` NodeJS ```js const axios = require("axios"); const url = "https://api.boldsign.com/v1-beta/document/updateMetaData?documentId=2f8b6aa7-xxxx-xxxx-xxxx-74edab513999"; const headers = { accept: "*/*", "X-API-KEY": "{apikey}", "Content-Type": "application/json", }; const data = { metaData: { DocumentType: "new", DocumentCategory: "software", }, }; axios .put(url, data, { headers: headers }) .then((response) => { console.log(response); }) .catch((error) => { console.error(error); }); ``` PHP ```php '*/*', 'X-API-KEY' => '{apikey}', 'Content-Type' => 'application/json' ]; $data = [ 'metaData' => [ 'DocumentType' => 'new', 'DocumentCategory' => 'software' ] ]; $response = $client->request('PUT', $url, [ 'headers' => $headers, 'json' => $data ]); ``` {% /codetab %} ## Request parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The document whose metadata needs to be updated with the help of Document ID. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="MetaData" /%}{% batch datatype="dictionary" /%}{% required /%} - Additional information about the document in the form of key-value pairs. Up to 50 key-value pairs can be added. The key is limited to 50 characters, and the value is limited to 500 characters. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Email address of the sender if you are updating metadata of the on behalf of documents. {% /nestedtable %} ## Partial update The metadata update always performs a partial update. If the metadata already exists, it will be updated with the new value. If the metadata does not exist, it will be added to the document. If any of the existing metadata is not passed in the request, the existing key-value pairs will not be affected. ## Deleting metadata The metadata can be deleted by passing an empty string as the value for the key. The key-value pair will be removed from the metadata. --- # File: embedded-request\create-embedded-edit-url.md # Create Embedded Edit Url The Create Embedded Edit Url API allows you to generate an embedded link for editing documents that are in progress, scheduled as drafts, or saved in draft state. With this link, users can make changes and then either send the document immediately or schedule it for later. - For `in-progress documents`, users can edit and send the updated version right away. - For `scheduled drafts`, users can cancel the existing schedule, edit the document, and either send instantly or reschedule. - For `drafts`, users can edit and choose to send immediately or set a new schedule. Changes made through the embedded URL are only applied when the document is sent or scheduled; no updates are saved in-between. ## Get embedded document edit URL {% post /%} {% path text="/v1/document/createEmbeddedEditUrl" /%} Generating an embedded document edit URL creates a unique link that lets you edit a specific document directly. If you generate more than one link for the same document, only the latest link will remain active for editing, while the older ones will lose access. This works just like editing through the web app, but the embedded link also includes extra settings designed specifically for the embedded editing experience. This API supports both `multipart/form-data` and `application/json` content types. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/createEmbeddedEditUrl?documentId=625cff3d...' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "RedirectUrl": "https://yourapp.example/redirect", "ShowToolbar": true, "SendViewOption": "FillingPage", "ShowSendButton": true, "ShowPreviewButton": true, "ShowNavigationButtons": true, "OnBehalfOf": "sender@yourdomain.com", "LinkValidTill": "2022-10-21T06:37:57.424Z", "Locale": "EN" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var request = new EmbeddedDocumentEditRequest { DocumentId = "625cff3d...", RedirectUrl = new Uri("https://example.com/after-edit"), ShowToolbar = true, SendViewOption = PageViewOption.PreparePage, Locale = Locales.EN, ShowSendButton = true, ShowPreviewButton = true, ShowNavigationButtons = true, LinkValidTill = DateTime.Parse("2025-01-31T23:59:59Z"), OnBehalfOf = "sender@yourdomain.com", }; var response = await documentClient.CreateEmbeddedEditUrlasync(request); var editUrl = response.EditUrl; ``` Python ```python import boldsign from datetime import datetime configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) request = boldsign.EmbeddedDocumentEditRequest( documentId = "625cff3d...", redirectUrl="https://example.com/after-edit", showToolbar=True, sendViewOption="PreparePage", locale="EN", showSendButton=True, showPreviewButton=True, showNavigationButtons=True, linkValidTill="2025-01-31T23:59:59Z", onBehalfOf="sender@yourdomain.com" ) result = document_api.create_embedded_edit_url_async(embedded_document_edit_request=request) edit_url = result.editUrl ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $request = new EmbeddedDocumentEditRequest(); $request->setDocumentId('625cff3d...'); $request->setRedirectUrl('https://example.com/after-edit'); $request->setShowToolbar(true); $request->setSendViewOption('PreparePage'); $request->setLocale('EN'); $request->setShowSendButton(true); $request->setShowPreviewButton(true); $request->setShowNavigationButtons(true); $request->setLinkValidTill('2025-01-31T23:59:59Z'); $request->setOnBehalfOf('sender@yourdomain.com'); $result = $document_api->createEmbeddedEditUrlasync($request); $editUrl = $result->getEditUrl(); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); EmbeddedDocumentEditRequest request = new EmbeddedDocumentEditRequest(); request.setDocumentId("625cff3d..."); request.setRedirectUrl("https://example.com/after-edit"); request.setShowToolbar(true); request.setSendViewOption(EmbeddedDocumentEditRequest.SendViewOptionEnum.PREPARE_PAGE); request.setLocale(EmbeddedDocumentEditRequest.LocaleEnum.EN); request.setShowSendButton(true); request.setShowPreviewButton(true); request.setShowNavigationButtons(true); request.setLinkValidTill(OffsetDateTime.parse("2025-01-31T23:59:59Z")); request.setOnBehalfOf("sender@yourdomain.com"); EmbeddedDocumentEdited result = documentApi.createEmbeddedEditUrlasync(request); URI editUrl = result.getEditUrl(); ``` NodeJS ```js import { DocumentApi, EmbeddedDocumentEditRequest } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const request = new EmbeddedDocumentEditRequest(); request.documentId = "625cff3d..."; request.redirectUrl = "https://example.com/after-edit"; request.showToolbar = true; request.sendViewOption = EmbeddedDocumentEditRequest.SendViewOptionEnum.PreparePage; request.locale = "EN"; request.showSendButton = true; request.showPreviewButton = true; request.showNavigationButtons = true; request.linkValidTill = "2025-01-31T23:59:59Z"; request.onBehalfOf = "sender@yourdomain.com"; const result = await documentApi.createEmbeddedEditUrlasync(request); const editUrl = result.editUrl; ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The unique document id of the document. {% /nestedtable %} ### Request body {% nestedtable %} - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - The redirect URI will be redirected after the document edit process is complete. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="SendViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize signers, authentication etc. The PreparePage is used to configure signers form fields. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSendButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Send` button at the top right corner of the page. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button. Set to false if you don't want your users to preview the document before sending it out for signature. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="LinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 30 days can be assigned. If no value is provided, the expiration is automatically set to 30 minutes. The String should be in date-time format. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded request link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), SV(Swedish) --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - Sender email address to act on behalf of another user during the embedded edit flow. {% /nestedtable %} ### Response ```json { "editUrl": "https://app.boldsign.com/document/embed/?documentId=b6**4e4d-19d7-4092-8*ce-e742d8**ffb2e_2q83*1cW;d69739ea-7**4-40d9-abde-ce99d**f99b6&isEmbedEditDocument=true" } ``` --- # File: embedded-request\create-embedded-request-link.md # Embedded request The Embedded request allows users to create, upload, and send documents on your website or mobile app using an iFrame, popup window, or new tab. It is beneficial when your application user needs to review or make other changes before sending it out for signature. You can either create a new document or use an existing template in order to generate the embedded request link for embedding within your application. The document created using the embedded request will remain in the `draft` state until the user completes and sends it out for signature. ## Create embedded request link {% post /%} {% path text="/v1/document/createEmbeddedRequestUrl" /%} Generating the embedded request link is the same as sending the regular document, but with additional properties to customize the embedded process. For detailed information on the send document API specific properties, please refer to the {% customlink href="/documents/send-document/" text="Send document" /%} article. This API supports both `multipart/form-data` and `application/json` content types. ### Asynchronous document processing The document creation process is asynchronous in nature. You will receive an embedded request URL and document ID immediately, but the uploaded document might still be processing in the background. In the meantime, if you open the embedded request URL in the browser, you will see the progress of the document processing. ### Example request using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/createEmbeddedRequestUrl' \ -H 'X-API-KEY={your API key}' \ -F 'Title=Sent from API Curl' \ -F 'ShowToolbar=true' \ -F 'ShowNavigationButtons=true' \ -F 'ShowPreviewButton=true' \ -F 'ShowSendButton=true' \ -F 'ShowSaveButton=true' \ -F 'SendViewOption=PreparePage' \ -F 'ShowTooltip=false' \ -F 'Locale=EN' \ -F 'SendLinkValidTill=2022-10-21T06:37:57.424Z' \ -F 'RedirectUrl=https://boldsign.dev/sign/redirect' \ -F 'Message=This is document message sent from API Curl' \ -F 'EnableSigningOrder=false' \ -F 'Signers[0][Name]=Signer Name 1' \ -F 'Signers[0][EmailAddress]=alexgayle@cubeflakes.com' \ -F 'Signers[0][SignerOrder]=1' \ -F 'Signers[0][AuthenticationCode]=1123' \ -F 'Signers[0][PrivateMessage]=This is private message for signer' \ -F 'Signers[0][FormFields][0][FieldType]=Signature' \ -F 'Signers[0][FormFields][0][Id]=Sign' \ -F 'Signers[0][FormFields][0][PageNumber]=1' \ -F 'Signers[0][FormFields][0][IsRequired]=True' \ -F 'Signers[0][FormFields][0][Bounds][X]=50' \ -F 'Signers[0][FormFields][0][Bounds][Y]=50' \ -F 'Signers[0][FormFields][0][Bounds][Width]=200' \ -F 'Signers[0][FormFields][0][Bounds][Height]=30' \ -F 'Files=@NDA.pdf;type=application/pdf' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); List formField = new List { new FormField( id: "Signature", type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)) }; var documentRequest = new EmbeddedDocumentRequest { Title = "Sent from API SDK", Signers = new List { new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formField) }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", FilePath = "YOUR_FILE_PATH", } }, SendViewOption = PageViewOption.PreparePage, ShowToolbar = true }; var embeddedSendCreated = documentClient.CreateEmbeddedRequestUrl(documentRequest); var documentSendUrl = embeddedSendCreated.SendUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) form_field = boldsign.FormField( fieldType="Signature", pageNumber=1, bounds=boldsign.Rectangle(x=50, y=50, width=200, height=30)) document_signer = boldsign.DocumentSigner( name="Signer Name 1", emailAddress="signer1@boldsign.dev", signerType="Signer", formFields=[form_field]) embedded_document_request = boldsign.EmbeddedDocumentRequest( title="Sent from API Python SDK", showToolbar=True, sendViewOption="FillingPage", signers=[document_signer], files=["YOUR_FILE_PATH"]) embedded_send_created = document_api.create_embedded_request_url_document(embedded_document_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $form_field = new FormField(); $form_field->setFieldType('Signature'); $form_field->setPageNumber(1); $bounds = new Rectangle([50, 100, 100, 60]); $form_field->setBounds($bounds); $document_signer = new DocumentSigner(); $document_signer->setName('Signer Name 1'); $document_signer->setEmailAddress('signer1@boldsign.dev'); $document_signer->setSignerType('Signer'); $document_signer->setFormFields([$form_field]); $embedded_document_request = new EmbeddedDocumentRequest(); $embedded_document_request->setTitle('Sent from API Php SDK'); $embedded_document_request->setSendViewOption('FillingPage'); $embedded_document_request->setShowToolbar(true); $embedded_document_request->setSigners([$document_signer]); $embedded_document_request->setFiles(['YOUR_FILE_PATH']); $embedded_send_created = $document_api->createEmbeddedRequestUrlDocument($embedded_document_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); FormField signatureField = new FormField(); signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE); signatureField.setPageNumber(1); Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f); signatureField.setBounds(bounds); DocumentSigner signer = new DocumentSigner(); signer.setName("Signer Name 1"); signer.setEmailAddress("signer1@boldsign.dev"); signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER); signer.setFormFields(Arrays.asList(signatureField)); EmbeddedDocumentRequest embeddedDocumentRequest = new EmbeddedDocumentRequest(); File file = new File("YOUR_FILE_PATH"); embeddedDocumentRequest.setFiles(Arrays.asList(file)); embeddedDocumentRequest.setSigners(Arrays.asList(signer)); embeddedDocumentRequest.setSendViewOption(EmbeddedDocumentRequest.SendViewOptionEnum.FILLING_PAGE); embeddedDocumentRequest.setShowToolbar(true); embeddedDocumentRequest.setTitle("Sent from API java SDK"); EmbeddedSendCreated embeddedSendCreated = documentApi.createEmbeddedRequestUrlDocument(embeddedDocumentRequest); ``` NodeJS ```js import { DocumentApi, DocumentSigner, EmbeddedDocumentRequest, FormField, Rectangle } from "boldsign"; import * as fs from 'fs'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; formField.bounds = bounds; const documentSigner = new DocumentSigner(); documentSigner.name = "Signer Name 1"; documentSigner.emailAddress = "signer1@boldsign.dev"; documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer; documentSigner.formFields = [formField]; const files = fs.createReadStream("YOUR_FILE_PATH"); const embeddedDocumentRequest = new EmbeddedDocumentRequest(); embeddedDocumentRequest.title = "Sent from API Node SDK"; embeddedDocumentRequest.showToolbar = true; embeddedDocumentRequest.sendViewOption = EmbeddedDocumentRequest.SendViewOptionEnum.FillingPage; embeddedDocumentRequest.files = [files]; embeddedDocumentRequest.signers = [documentSigner]; const embeddedSendCreated = documentApi.createEmbeddedRequestUrlDocument(embeddedDocumentRequest); ``` {% /codetab %} ### Code snippet using application/json {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/createEmbeddedRequestUrl' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "Title": "Sent from API Curl", "ShowToolbar": true, "ShowNavigationButtons": true, "ShowPreviewButton": true, "ShowSendButton": true, "ShowSaveButton": true, "SendViewOption": "PreparePage", "ShowTooltip": false, "Locale": "EN", "SendLinkValidTill": "2022-10-21T06:37:57.424Z", "RedirectUrl": "https://boldsign.dev/sign/redirect", "Message": "This is document message sent from API Curl", "EnableSigningOrder": false, "Signers": [ { "Name": "Signer Name 1", "EmailAddress": "alexgayle@cubeflakes.com", "SignerOrder": 1, "AuthenticationCode": "1123", "PrivateMessage": "This is private message for signer", "FormFields": [ { "FieldType": "Signature", "Id": "Sign", "PageNumber": 1, "IsRequired": true, "Bounds": { "X": 50, "Y": 50, "Width": 200, "Height": 30 } } ] } ], "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ] }' ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - The redirect URI will be redirected after the document creation process is completed. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="SendViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize signers, authentication, etc. The PreparePage is used to configure signers form fields. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop-down menu. Set to false if you don't want your users to save the document as draft instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowSendButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Send` button at the top right corner of the page. Set to false if you want your users to save the document as only drafts instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drop-down menu. Set to false if you don't want your users to preview the document before sending it out for signature. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="SendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The String should be in date-time format. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded request link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), and SV(Swedish) --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="AllowScheduledSend" /%}{% batch datatype="boolean" /%} - This property enables or disables the scheduling option. When enabled, it allows scheduling the document for future sending. The default value is `false`. {% /nestedtable %} ### Example response ```json { "documentId": "625cff3d...", "sendUrl": "https://app.boldsign.com/document/embed/?documentId=625cff3d..." } ``` --- # File: embedded-request\create-embedded-request-link-from-template.md # Create Embedded Request Link from Template {% post /%} {% path text="/v1/template/createEmbeddedRequestUrl" /%} Unlike the document embedded request, the template embedded request process is synchronous, and your generated URL will be immediately accessible with documents and form fields already processed. Generating the embedded request link is same as the regular template send, but with additional properties to customize the embedded process. For detailed information on the template API specific properties, please refer to the {% customlink href="/template/create-template/" text="Template send section" /%} article. ## Example request {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/createEmbeddedRequestUrl?templateId=' \ -H 'X-API-KEY: ' \ -H 'Content-Type: application/json' \ -d '{ "RedirectUrl": "https://yourapp.example/redirect", "ShowToolbar": true, "SendViewOption": "FillingPage", "ShowSaveButton": true, "ShowSendButton": true, "Locale": "EN", "ShowPreviewButton": true, "ShowNavigationButtons": true, "ShowTooltip": false, "RoleRemovalIndices": [1, 2] } ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var templateRequest = new EmbeddedTemplateRequest() { TemplateId = "YOUR_TEMPLATE_ID", Roles = [ new Roles() { RoleIndex = 1, SignerName = "David", SignerEmail = "david@cubeflakes.com", SignerType = SignerType.Signer } ], SendViewOption = PageViewOption.PreparePage, ShowToolbar = true }; var embeddedSendCreated = templateClient.CreateEmbeddedRequestUrl(templateRequest); var sendUrl = embeddedSendCreated.SendUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) role = boldsign.Role( roleIndex=1, signerRole="signer", signerName="Signer Name 1", signerEmail="signer1@boldsign.dev") embedded_send_template_form_request = boldsign.EmbeddedSendTemplateFormRequest( roles=[role], showToolbar=True, sendViewOption="PreparePage") embedded_send_created = template_api.create_embedded_request_url_template(template_id="YOUR_TEMPLATE_ID", embedded_send_template_form_request=embedded_send_template_form_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $role = new Role(); $role->setRoleIndex(1); $role->setSignerRole('Signer'); $role->setSignerName('Signer Name 1'); $role->setSignerEmail('signer1@boldsign.dev'); $embedded_send_template_form_request = new EmbeddedSendTemplateFormRequest(); $embedded_send_template_form_request->setSendViewOption('PreparePage'); $embedded_send_template_form_request->setShowToolbar(true); $embedded_send_template_form_request->setRoles([$role]); $embedded_send_created = $template_api->createEmbeddedRequestUrlTemplate($template_id = 'YOUR_TEMPLATE_ID', $embedded_send_template_form_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); Role role = new Role(); role.setRoleIndex(1); role.setSignerName("Signer Name 1"); role.setSignerEmail("signer1@boldsign.dev"); role.setSignerRole("Signer"); EmbeddedSendTemplateFormRequest embeddedSendTemplateFormRequest = new EmbeddedSendTemplateFormRequest(); embeddedSendTemplateFormRequest.setRoles(Arrays.asList(role)); embeddedSendTemplateFormRequest.setShowToolbar(true); embeddedSendTemplateFormRequest.setSendViewOption(EmbeddedSendTemplateFormRequest.SendViewOptionEnum.PREPARE_PAGE); EmbeddedSendCreated embeddedSendCreated = templateApi.createEmbeddedRequestUrlTemplate("YOUR_TEMPLATE_ID", embeddedSendTemplateFormRequest); ``` NodeJS ```js import { TemplateApi, EmbeddedSendTemplateFormRequest, Role } from "boldsign"; import * as fs from 'fs'; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const role = new Role(); role.roleIndex = 1; role.signerName = "Signer Name 1"; role.signerEmail = "signer1@boldsign.dev"; role.signerRole = "Signer"; const embeddedSendTemplateFormRequest = new EmbeddedSendTemplateFormRequest(); embeddedSendTemplateFormRequest.roles = [role]; embeddedSendTemplateFormRequest.showToolbar = true; embeddedSendTemplateFormRequest.sendViewOption = EmbeddedSendTemplateFormRequest.SendViewOptionEnum.FillingPage; const embeddedSendCreated = templateApi.createEmbeddedRequestUrlTemplate("YOUR_TEMPLATE_ID", embeddedSendTemplateFormRequest); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="templateId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the existing template to be used for sending the template. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - The redirect URI will be redirected after the template creation process is complete. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the template editor. Defaults to false. --- - {% arguments name="SendViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize signers, authentication etc. The PreparePage is used to configure signers form fields. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop down menu. Set to false if you don't want your users to save the template as draft instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowSendButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Send` button at the top right corner of the page. Set to false if you want your users to save the template as only drafts instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drop down menu. Set to false if you don't want your users to preview the template before sending it out for signature. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="SendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The String should be in date-time format. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded request link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), SV(Swedish) --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="AllowScheduledSend" /%}{% batch datatype="boolean" /%} - This property enables or disables the scheduling option. When enabled, it allows scheduling the document for future sending. The default value is `false`. {% /nestedtable %} ## Example response ```json { "documentId": "625cff3d...", "sendUrl": "https://app.boldsign.com/document/embed/?documentId=625cff3d..." } ``` --- # File: embedded-request\create-embedded-request-link-using-multiple-templates.md # Create Embedded Request Link with Multiple Templates The Merge Embedded Request will allow you to merge one or more templates with a document and generate a link that allows users to edit the merged document before sending it. This API is useful for streamlining document preparation, as it combines templates with a document and provides an easy way for users to make any final changes before sending. The document created using the embedded request will be kept in the `draft` state until the user completes it and sends it out for signature. ## Create embedded request link {% post /%} {% path text="/v1/template/mergeCreateEmbeddedRequestUrl" /%} Generating a merge embedded request link follows a similar process as a standard template merge and send request, but it includes additional settings specific to the embedded editing experience. Please refer the {% customlink href="/documents/send-document-using-multiple-templates/" text="Template merge and send" /%} article for the document API specific properties. This API supports both `multipart/form-data` and `application/json` content types. ### Asynchronous document processing While merging the multiple templates, if you add additional files, the process of document send will be performed asynchronous. You will receive an embedded request URL and document ID immediately, but the uploaded document might be still processing in the background. In the mean time, you can see the progress of the document processing by opening the embedded create document URL in the browser. To determine whether the embedded request has been successfully created, you must listen for the webhooks. The system will trigger either a `DraftCreated` event, indicating success, or a `TemplateSendFailed` event, indicating failure. In the event of failure, the system will provide an error message. It is imperative to address and resolve this error to ensure the embedded merge template process comepltes successfully in the next request. {% customlink href="/webhooks/introduction/" text="Read more about webhooks" /%} ### Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/mergeCreateEmbeddedRequestUrl' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "RedirectUrl": "https://yourapp.example/redirect", "ShowToolbar": true, "SendViewOption": "FillingPage", "ShowSaveButton": true, "ShowSendButton": true, "ShowPreviewButton": true, "ShowNavigationButtons": true, "ShowTooltip": false, "TemplateIds": [ "b6e722a9-xxxx-xxxx-xxxx-ad3e3f95f5fa","516e056b-xxxx-xxxx-xxx-9ae90ed3217f" ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your-API-KEY"); var templateClient = new TemplateClient(apiClient); // This is an example document id, add your own template id created from the web app upon usage. string[] templateIds = new string[] { "0992eb79-ea24-4e95-887a-10aa82b30957", "01c19aef-4e95-887a-ea24-7178ef2e1036" }; var templateRequest = new EmbeddedMergeTemplateRequest { // customize page options SendViewOption = PageViewOption.PreparePage, Locale = Locales.EN, ShowToolbar = true, ShowNavigationButtons = true, ShowSaveButton = true, ShowPreviewButton = true, ShowSendButton = true, ShowTooltip = false, TemplateIds = templateIds }; var documentCreated = await templateClient.MergeCreateEmbeddedRequestUrlAsync(templateRequest); // url to send the document from your web application var sendUrl = documentCreated.SendUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration( api_key = "YOUR_API_KEY" ) with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) form_field = [ boldsign.FormField( fieldType="Signature", pageNumber=1, bounds=boldsign.Rectangle( x=100, y=100, width=100, height=50 ) ), ] role = boldsign.Role( signerRole="NewRole", roleIndex=4, signerName="David", signerEmail="david@cubeflakes.com", formFields=form_field, locale="EN" ) merge_embedded_create_template_request = boldsign.EmbeddedMergeTemplateFormRequest( templateIds=["YOUR_TEMPLATE_ID", "YOUR_TEMPLATE_ID"], roles=[role], showToolbar=True, showNavigationButtons=True, showPreviewButton=True, showSendButton=True, showSaveButton=True, sendViewOption="PreparePage", locale="EN", showTooltip=False, enableSigningOrder=False, roleRemovalIndices=[1, 2], files=["\tests\data\agreement.pdf"] ) merge_create_embedded_request_url_template_response = template_api.merge_create_embedded_request_url_template(merge_embedded_create_template_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); // Create a role object $role = new \BoldSign\Model\Role(); $role->setSignerRole("developer"); $role->setRoleIndex(1); $role->setSignerName("david"); $role->setSignerEmail("david@cubeflakes.com"); $role->setSignerOrder(1); $role->setSignerType("Signer"); $embedded_merge_template_request_url = new \BoldSign\Model\EmbeddedMergeTemplateFormRequest(); $embedded_merge_template_request_url->setTitle("Agreement"); $embedded_merge_template_request_url->setFiles(["\tests\data\agreement.pdf"]); $embedded_merge_template_request_url->setRoles([$role]); $embedded_merge_template_request_url->setTemplateIds(["YOUR_TEMPLATE_ID1","YOUR_TEMPLATE_ID2"]); $Embedded_template_url = $template_api->mergeCreateEmbeddedRequestUrlTemplate( $embedded_merge_template_request_url); ``` NodeJS ```js import { EmbeddedMergeTemplateFormRequest, Role, TemplateApi } from 'boldsign'; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); var role = new Role(); role.signerEmail = "david@cubeflakes.com"; role.signerName = "David"; role.roleIndex = 1; role.signerType = Role.SignerTypeEnum.Signer; role.signerRole = "Developer"; var file = fs.createReadStream("\tests\data\agreement.pdf") var embeddedMergeTemplateUrl = new EmbeddedMergeTemplateFormRequest(); embeddedMergeTemplateUrl.files = [file]; embeddedMergeTemplateUrl.title = "Agreement" embeddedMergeTemplateUrl.roles= [role]; embeddedMergeTemplateUrl.templateIds = ["YOUR_TEMPLATE_ID1","YOUR_TEMPLATE_ID2"]; var mergeTemplateUrl = templateApi.mergeCreateEmbeddedRequestUrlTemplate(embeddedMergeTemplateUrl); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); Role role = new Role(); role.setSignerEmail("luthercooper@cubeflakes.com"); role.setSignerName("LutherCooper"); role.setSignerType(Role.SignerTypeEnum.SIGNER); role.setSignerRole("Manager"); role.setRoleIndex(1); List files = new ArrayList(); File file1 = new File("\tests\data\agreement.pdf"); files.add(file1); EmbeddedMergeTemplateFormRequest embeddedMergeTemplateFormRequest = new EmbeddedMergeTemplateFormRequest(); embeddedMergeTemplateFormRequest.setFiles(files); embeddedMergeTemplateFormRequest.setTitle("Agreement"); embeddedMergeTemplateFormRequest.setRoles(Arrays.asList(role)); embeddedMergeTemplateFormRequest.setTemplateIds(Arrays.asList("YOUR_TEMPLATE_ID1","YOUR_TEMPLATE_ID2")); EmbeddedSendCreated embeddedTemplateRequestUrl = templateApi.mergeCreateEmbeddedRequestUrlTemplate(embeddedMergeTemplateFormRequest); ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="TemplateIds" /%}{% batch datatype="array" /%} - These are the template IDs of the existing templates to be used for sending. One or more values can be specified. --- - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - The redirect URI will be redirected after the template creation process is complete. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the template editor. Defaults to false. --- - {% arguments name="SendViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize signers, authentication etc. The PreparePage is used to configure signers form fields. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop down menu. Set to false if you don't want your users to save the template as draft instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowSendButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Send` button at the top right corner of the page. Set to false if you want your users to save the template as only drafts instead of sending it out for signature. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drop down menu. Set to false if you don't want your users to preview the template before sending it out for signature. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="SendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The String should be in date-time format. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded request link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), SV(Swedish) --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. {% /nestedtable %} ### Example response ```json { "documentId": "625cff3d...", "sendUrl": "https://app.boldsign.com/document/embed/?documentId=625cff3d..." } ``` --- # File: embedded-request\embed-in-an-iFrame.md # Embed Document in an iFrame The generated URL can be embedded within your website using the iFrame HTML element, and some parts of the embedded request page can be controlled using the client side triggers. ```html ``` ## Client side triggers Client side triggers are special commands that are used to control the embedded request page loaded in your website's iFrame element. There are currently six triggers available and they are listed as follows. {% nestedtable %} - `onNextClick` - This trigger is used to move the embedded request page from FillingPage to PreparePage. It will work only when the current page is FillingPage. --- - `onPreviewClick` - This trigger is used to navigate to the preview document page where your user can view the document from each signer's perspective. It will work only when the current page is PreparePage. --- - `onSaveClick` - This trigger is used to save the current state of the document without completing the document creation process. When triggered, it allows users to save their progress and continue working on the document at a later time. --- - `onSaveAndCloseClick` - This trigger is used to save the current state of the document as a draft and completes the document creation process. For this trigger, it is necessary to set `ShowSaveButton` to `true` during the URL generate request, and the current page to be PreparePage. --- - `onSendClick` - This trigger is used to complete the document and send it out for signature. For this trigger, it is necessary to set `ShowSendButton` to `true` during the URL generate request, and the current page to be PreparePage. --- - `onPreviewExit` - This trigger is used to exit the preview document page and return to the PreparePage. {% /nestedtable %} **Usage** ```html
``` ```js ``` ## Client side events Client side events are special events that are triggered from the embedded request page to the host/parent (Your website). There are currently five events available, and they are listed, as follows. {% nestedtable %} - `onDraftSuccess` - This event will be triggered when the user selects the `Save & Close` option from the `More Action` drop-down menu and the document draft save process is successful. --- - `onDraftFailed` - This event is triggered when the user selects the `Save & Close` option from the `More Action` drop-down menu, but the draft save process fails. --- - `onCreateSuccess` - This event will be triggered when the user clicks the `Send` button, and the document creation process is successful. --- - `onCreateFailed` - This event will be triggered when the user clicks the `Send` button, but the document creation process fails. --- - `onLoadComplete` - This event will be triggered when the embedded page has finished loading. It is useful for performing actions after the page loading is complete. --- - `onPageNavigation` - This event is triggered when the user navigates to a different page within the embedded document flow. It is useful for tracking user progress across the Prepare, Filling, and Preview pages. {% /nestedtable %} **Usage** ```js ``` ## Best practices There are some best practices to follow when incorporating the embedded request URL into your application to provide the best user experience possible. - Allow BoldSign to take complete control of the browser window. - If you decide to use the iFrame sizing, ensure that the recommended minimum width and height are 1360 and 768, respectively. Additionally, the embedded page supports responsive layouts, with mobile mode for widths less than 768, tab mode for widths between 768 and 1024, and desktop mode for widths above 1024. ## Webhooks Please refer to the {% customlink href="/webhooks/introduction" text="Webhooks" /%} article to subscribe to template events. If you've subscribed to the `Document Sent`, your URL will receive a webhook request when the document creation process is finished. You can synchronize the document status, new signers and their configuration, and any document configuration changes made within the embedded request in your application/DB. --- # File: embedded-signing\embed-in-an-iFrame.md # Embedding sign link in an Iframe You can generate the embedded signing link by referring to this article {% customlink href="/embedded-signing/get-embedded-signing-link/" text="Get embedded signing link" /%} and embed that link into your application using Iframe. Please refer to the following example code snippet to embed the signing link into an Iframe. ```html ``` ## Client side events Client side events are special events that are triggered from the embedded sign page to host/parent (Your website). There are currently six events available, and they are listed, as follows. {% nestedtable %} - {% arguments name="onDocumentSigned" /%} - This event will be triggered after the signer successfully completes the signing process of the document. --- - {% arguments name="onDocumentSigningFailed" /%} - This event will be triggered if any failure occurs while the signer completes the signing process of the document. --- - {% arguments name="onDocumentReassigned" /%} - This event will be triggered after the signer successfully completes the reassigning process of the document. --- - {% arguments name="onDocumentReassigningFailed" /%} - This event will be triggered if any failure occurs while the signer completes the reassigning process of the document. --- - {% arguments name="onDocumentDeclined" /%} - This event will be triggered after the signer successfully completes the declining process of the document. --- - {% arguments name="onDocumentDecliningFailed" /%} - This event will be triggered if any failure occurs during the signer's completion of the document declining process. {% /nestedtable %} Please refer to the following sample code snippet for handling this event in your application. **Usage** ```js ``` ## Webhooks If you've subscribed to the `Document Signed,` your URL will receive a webhook request when the signer successfully completes the document signing process. You can synchronize the document status, signer's signing status, and any document configuration changes made within the embedded sign in your application/DB. After your signer has signed the document, you can expect to download the completed document at your end. However, the final PDF generation will take some time. So, you can subscribe to our `Document Completed` event, which will be triggered after everyone has signed the document and the final PDF file has been generated. --- # File: embedded-signing\get-embedded-signing-link.md # Embedded Sign The embedded sign request will allows the signers to sign the document within your website or mobile app using an iFrame, popup window, or new tab. Once you successfully created the new document by referring the article {% customlink href="/documents/send-document/" text="Send document" /%}, it will return the document Id which we can use to generate the embedded signing link. Enable secure document signing with ID verification using the getEmbeddedSigningLink API. This feature ensures that only authorized individuals can sign documents, enhancing security. ## Get embedded signing link {% get /%} {% path text="/v1/document/getEmbeddedSignLink" /%} Let us walk through generating the embedded signing link and how it can be embedded into Iframe. ### Validating the signer's identity {% highlight %}Please note that you are responsible for verifying the signer's identity before providing them access to the signing URL. This step is required to ensure that the eSignature is legally binding.{% /highlight %} BoldSign produces an audit trail with a note saying that the document was signed with an embedded signature link. You must maintain records separately that your system validated the signer's identity before providing them access to the BoldSign embedded document URL for signing. ### Code snippet {% codetab %} cURL ```shell curl -X GET ' https://api.boldsign.com/v1/document/getEmbeddedSignLink?documentId=17882g56-6686-46d9-dhg3-ce5737751234&signerEmail=alexgayle@cubeflakes.com&redirectUrl=https://www.syncfusion.com/&signLinkValidTill=10/14/2022' \ -H 'X-API-KEY: {use your API-KEY here}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var documentClient = new DocumentClient(apiClient); var embeddedSigningLink = documentClient.GetEmbeddedSignLink("YOUR_DOCUMENT_ID", "alexgayle@cubeflakes.com"); var signLink = embeddedSigningLink.SignLink; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) document_id = "YOUR_DOCUMENT_ID" signing_email = "alexgayle@cubeflakes.com" embedded_signing_link = document_api.get_embedded_sign_link(document_id=document_id, signer_email=signing_email) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $document_id = 'YOUR_DOCUMENT_ID'; $signer_email = 'alexgayle@cubeflakes.com'; $embedded_signing_link = $document_api->getEmbeddedSignLink($document_id, $signer_email); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); String documentId = "YOUR_DOCUMENT_ID"; String signerEmail = "alexgayle@cubeflakes.com"; EmbeddedSigningLink embeddedSigningLink = documentApi.getEmbeddedSignLink(documentId, signerEmail, null, null, null, null); ``` NodeJS ```js import { DocumentApi } from "boldsign"; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const documentId = "YOUR_DOCUMENT_ID"; const signerEmail = "alexgayle@cubeflakes.com"; const embeddedSigningLink = documentApi.getEmbeddedSignLink(documentId, signerEmail); ``` {% /codetab %} ### Query parameters {% nestedtable %} - {% arguments name="documentId" /%}{% batch datatype="string" /%}{% required /%} - The document Id that you got after the successful creation of the document. --- - {% arguments name="signerEmail" /%}{% batch datatype="string" /%} - Define the SignerEmail, which is used to identify to which recipient in the document you need to generate the embedded signing link. The string should be in binary format. Please note that you need to pass the signer email that you used while creating the document. If you send the signer email which is not part of the document, the API will throw an error. --- - {% arguments name="countryCode" /%}{% batch datatype="string" /%} - Define the CountryCode of the signer phone number which is used to identify to which recipient in the document you need to generate the embedded signing link. Please note that you need to pass the country code of the signer phone number that you used while creating the document. --- - {% arguments name="phoneNumber" /%}{% batch datatype="string" /%} - Define the PhoneNumber which is used to identify to which recipient in the document you need to generate the embedded signing link. Please note that you need to pass the actual phone number of the signer that you used while creating the document. --- - {% arguments name="signLinkValidTill" /%}{% batch datatype="string" /%} - It is used to define how long the signers can sign the document using the embedded signing link. The string should be in date-time format. --- - {% arguments name="redirectUrl" /%}{% batch datatype="string" /%} - You can set this properly once the signer has completed the signing process and needs to be redirected to a specific site. {% /nestedtable %} **Notes:** 1. Please note that if you expect the signers to sign the document within your application only, then you can disable the emails sending from the BoldSign application while sending the signature request. Please refer to this article {% customlink href="/documents/send-document/" text="Send document" /%}, for more information. 2. When sending a request to get an embedded signing link, provide either `SignerEmail` or `PhoneNumber` based on the delivery mode specified when creating the document. ### Example response ***200 Success*** ```json { "signLink": "https://app.boldsign.com/document/sign/?documentId=17882f5a-xxxx-xxxx-xxxx-ce5737756339s_dyU07;dfeab145-xxxx-xxxx-xxxx-d705b85823c8" } ``` --- # File: embedded-template\create-embedded-template.md # Create embedded template The embedded template allows users to compose and create reusable templates on your website or mobile app using an iFrame, pop-up window, or a new tab. The process is similar to the embedded request, but it is used for template creation. The templates created using the embedded template will be in the `draft` state until the user completes the create process from the generated URL. ## Create an embedded template link {% post /%} {% path text="/v1/template/createEmbeddedTemplateUrl" /%} The embedded template link is created in the same way as the regular template, but with additional properties to customize the embedded process. Please refer to the {% customlink href="/template/create-template/" text="Create template" /%} for the create template API specific properties. This API supports both `multipart/form-data` and `application/json` content types. ### Asynchronous document processing The template creation process is asynchronous in nature. You will receive an embedded request URL and template ID immediately, but the uploaded document might still be processing in the background. In the meantime, you can see the progress of the document processing by opening the embedded create template URL in the browser. ### Example request using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl --location --request POST 'https://api.boldsign.com/v1/template/createEmbeddedTemplateUrl' \ --header 'X-API-KEY: ****YOUR-API-KEY****' \ --form 'Title=" API template"' \ --form 'Description=" API template description"' \ --form 'DocumentTitle=" API document title"' \ --form 'DocumentMessage=" API document message description"' \ --form 'AllowMessageEditing=" true"' \ --form 'Roles[0][name]="Manager"' \ --form 'Roles[0][index]="1"' \ --form 'ShowToolbar="true"' \ --form 'ShowSaveButton="true"' \ --form 'ShowSendButton="true"' \ --form 'ShowPreviewButton="true"' \ --form 'ShowNavigationButtons="true"' \ --form 'ShowTooltip="false"' \ --form 'ViewOption="PreparePage"' \ --form 'AllowNewFiles="true"' \ --form 'AllowModifyFiles="true"' \ --form 'Files=@"/docs/test-document.pdf"' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var templateRequest = new CreateEmbeddedTemplateRequest { Title = "Template created from API SDK", DocumentTitle = "API document title", Roles = [ new TemplateRole() { Index = 1, Name = "Manager" } ], Files = new List { new DocumentFilePath { ContentType = "application/pdf", FilePath = "YOUR_FILE_PATH", }, }, ViewOption = PageViewOption.PreparePage, ShowToolbar = true, }; var templateCreated = templateClient.CreateEmbeddedTemplateUrl(templateRequest); var templateCreateUrl = templateCreated.CreateUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="Your-API-KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) template_role = boldsign.TemplateRole( index=1, name="Manager") embedded_create_template_request = boldsign.EmbeddedCreateTemplateRequest ( title="API template", documentTitle="API document title", roles=[template_role], showToolbar=True, viewOption="FillingPage", files=["YOUR_FILE_PATH"]) template_created = template_api.create_embedded_template_url(embedded_create_template_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $role = new TemplateRole(); $role->setIndex(1); $role->setName('Manager'); $embedded_create_template_request = new EmbeddedCreateTemplateRequest(); $embedded_create_template_request->setTitle('API template'); $embedded_create_template_request->setDocumentTitle('API document title'); $embedded_create_template_request->setRoles([$role]); $embedded_create_template_request->setShowToolbar(true); $embedded_create_template_request->setViewOption('PreparePage'); $files = new FileInfo(); $files = 'YOUR_FILE_PATH'; $embedded_create_template_request->setFiles([$files]); $template_created = $template_api->createEmbeddedTemplateUrl($embedded_create_template_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); TemplateRole role = new TemplateRole(); role.setIndex(1); role.setName("Manager"); EmbeddedCreateTemplateRequest embeddedCreateTemplateRequest = new EmbeddedCreateTemplateRequest(); embeddedCreateTemplateRequest.setTitle("API template"); embeddedCreateTemplateRequest.setDocumentTitle("API document title"); embeddedCreateTemplateRequest.setRoles(Arrays.asList(role)); embeddedCreateTemplateRequest.setShowToolbar(true); embeddedCreateTemplateRequest.setViewOption(EmbeddedCreateTemplateRequest.ViewOptionEnum.PREPARE_PAGE); File file = new File("YOUR_FILE_PATH"); embeddedCreateTemplateRequest.setFiles(Arrays.asList(file)); EmbeddedTemplateCreated templateCreated = templateApi.createEmbeddedTemplateUrl(embeddedCreateTemplateRequest); ``` NodeJS ```js import { TemplateApi, TemplateRole, EmbeddedCreateTemplateRequest } from "boldsign"; import * as fs from 'fs'; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const role = new TemplateRole(); role.index = 1; role.name = "Manager"; const files = fs.createReadStream("YOUR_FILE_PATH"); const embeddedCreateTemplateRequest = new EmbeddedCreateTemplateRequest(); embeddedCreateTemplateRequest.title = "Testing Embedded Template"; embeddedCreateTemplateRequest.documentTitle = "Embedded Template Test"; embeddedCreateTemplateRequest.showToolbar = true; embeddedCreateTemplateRequest.viewOption = EmbeddedCreateTemplateRequest.ViewOptionEnum.PreparePage; embeddedCreateTemplateRequest.roles = [role]; embeddedCreateTemplateRequest.files = [files]; const templateCreated = templateApi.createEmbeddedTemplateUrl(embeddedCreateTemplateRequest); ``` {% /codetab %} ### Code snippet using application/json {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/template/createEmbeddedTemplateUrl' \ -H 'X-API-KEY: ****YOUR-API-KEY****' \ -H 'Content-Type: application/json' \ -d '{ "Title": "API template", "Description": "API template description", "DocumentTitle": "API document title", "DocumentMessage": "API document message description", "AllowMessageEditing": true, "Roles": [ { "Name": "Manager", "Index": 1 } ], "ShowToolbar": true, "ShowSaveButton": true, "ShowSendButton": true, "ShowPreviewButton": true, "ShowNavigationButtons": true, "ShowTooltip": false, "ViewOption": "PreparePage", "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ] }' ``` {% /codetab %} ### Request body {% nestedtable %} - {% arguments name="RedirectUrl" /%}{% batch datatype="string" /%} - The redirect URI to be redirected after the template create process is completed. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="ViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize roles, enforce authentication, etc. The PreparePage is used to configure form fields for the roles. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop down menu. Set to false if you don't want your users to save the template as a draft instead of finalizing the template. Defaults to true. --- - {% arguments name="ShowSendButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Create template` button at the top right corner of the page. Set to false if you want your users to save the template as only drafts instead of finalizing the template. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drop down menu. Set to false if you don't want your users to preview the template before finalizing it. Defaults to true. --- - {% arguments name="AllowNewFiles" /%}{% batch datatype="boolean" /%} - When set to true, the sender can add new files while using this template to send signature requests. If set to false, the sender will not be able to add new files. Defaults to true. --- - {% arguments name="AllowModifyFiles" /%}{% batch datatype="boolean" /%} - When set to true, the sender can replace or delete existing files while using this template to send signature requests. If set to false, the sender will not have the ability to replace or delete files. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="LinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="AutoDetectFields" /%}{% batch datatype="boolean" /%} - When enabled, it will convert all the fillable form fields in the document to BoldSign form fields. BoldSign supports Textbox, Checkbox, Radio button, and Signature form fields. Other fields will not be detected as of now. Defaults to false. {% /nestedtable %} ### Example response ```json { "templateId": "6a154b94...", "createUrl": "https://app.boldsign.com/document/embed/?templateId=6a154b94..." } ``` --- # File: embedded-template\edit-embedded-template.md # Edit embedded template The embedded template edit link allows users to edit already created templates on your website or mobile app using an iFrame, pop-up window, or a new tab. ## Get embedded template edit link {% post /%} {% path text="/v1/template/getEmbeddedTemplateEditUrl" /%} The get embedded template edit link has additional properties to customize the embedded process. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/getEmbeddedTemplateEditUrl?templateId=be5cbb00-xxxx-xxxx-xxxx-bafa580exxxx' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ShowToolbar=false' \ -F 'ViewOption=PreparePage' \ -F 'ShowSaveButton=true' \ -F 'ShowCreateButton=true' \ -F 'ShowPreviewButton=true' \ -F 'ShowNavigationButtons=true' \ -F 'ShowTooltip=false' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var embeddedTemplateEditRequest = new EmbeddedTemplateEditRequest() { TemplateId = "YOUR_TEMPLATE_ID", ViewOption = PageViewOption.FillingPage, ShowToolbar = true, ShowPreviewButton = false, }; var embeddedTemplateEdited = templateClient.GetEmbeddedTemplateEditUrl(embeddedTemplateEditRequest); var templateEditUrl = embeddedTemplateEdited.EditUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) embedded_template_edit_request = boldsign.EmbeddedTemplateEditRequest( viewOption="PreparePage", showPreviewButton=False, showToolbar=True) embedded_template_edited = template_api.get_embedded_template_edit_url(template_id= "YOUR_TEMPLATE_ID", embedded_template_edit_request=embedded_template_edit_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $embedded_template_edit_request = new EmbeddedTemplateEditRequest(); $embedded_template_edit_request->setShowToolbar(true); $embedded_template_edit_request->setShowPreviewButton(false); $embedded_template_edit_request->setViewOption('PreparePage'); $embedded_template_edited = $template_api->getEmbeddedTemplateEditUrl($template_id = 'YOUR_TEMPLATE_ID', $embedded_template_edit_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); EmbeddedTemplateEditRequest embeddedTemplateEditRequest = new EmbeddedTemplateEditRequest(); embeddedTemplateEditRequest.setShowToolbar(true); embeddedTemplateEditRequest.setShowPreviewButton(false); embeddedTemplateEditRequest.setViewOption(EmbeddedTemplateEditRequest.ViewOptionEnum.PREPARE_PAGE); EmbeddedTemplateEdited embeddedTemplateEdited = templateApi.getEmbeddedTemplateEditUrl("YOUR_TEMPLATE_ID", embeddedTemplateEditRequest); ``` NodeJS ```js import { TemplateApi, EmbeddedTemplateEditRequest } from "boldsign"; const templateApi = new TemplateApi(); templateApi.setApiKey("YOUR_API_KEY"); const embeddedTemplateEditRequest = new EmbeddedTemplateEditRequest(); embeddedTemplateEditRequest.showToolbar = true; embeddedTemplateEditRequest.showPreviewButton = false; embeddedTemplateEditRequest.viewOption = EmbeddedTemplateEditRequest.ViewOptionEnum.PreparePage; const embeddedTemplateEdited = templateApi.getEmbeddedTemplateEditUrl("YOUR_TEMPLATE_ID", embeddedTemplateEditRequest); ``` {% /codetab %} ### Query parameters {% nestedtable %} - {% arguments name="templateId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the template to edit. {% /nestedtable %} ### Request body {% nestedtable %} - {% arguments name="RedirectURL" /%}{% batch datatype="string" /%} - The redirect URI is to be redirected after the template edit process is completed. The string should be in URI format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="ViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize roles, enforce authentication etc. The PreparePage is used to configure form fields for the roles. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop-down menu. Set to false if you don't want your users to save the template. Defaults to true. --- - {% arguments name="ShowCreateButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save template` button at the top right corner of the page. Set to false if you don't want your users to save the template. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drop-down menu. Set to false if you don't want your users to preview the template before finalizing it. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="LinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - The email address of the user that was used to create the template on their behalf. {% /nestedtable %} ### Example response ***201 Created*** ```json { "editUrl": "https://app.boldsign.com/document/embed/?templateId=be5cbb00-xxxx-xxxx-xxxx-0exxxx-xxxx-f31e22cxxxxee_fZHzxxxx;41e2041f-xxxx-xxxx-xxxx-d36d4712xxxx&isEditTemplate=true" } ``` --- # File: embedded-template\embedded-cloned-template.md # Embedded cloned template The embedded cloned template link allows users to prepare the cloned templates on your website or mobile app using an iFrame, popup window, or a new tab. ## Clone Template The Clone Template API allows users to clone the existing template into new template. The form fields can be includeded in the template by enabling true in `WithFormFieldValues`.This API also create embedded link for that newly cloned template. ## Get embedded cloned template link {% post /%} {% path text="/v1/template/cloneTemplate" /%} The get embedded cloned template link has additional properties to customize the embedded process. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/cloneTemplate?templateId=be5cbb00-xxxx-xxxx-xxxx-bafa580exxxx' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ViewOption=PreparePage' \ -F 'ShowSaveButton=true' \ -F 'ShowCreateButton=true' \ -F 'ShowPreviewButton=true' \ -F 'ShowNavigationButtons=true' \ -F 'EmbeddedSendLinkValidTill=DateTime.Now.AddDays(1)' \ -F 'WithFormFieldValues=true' \ -F 'Locale=EN' \ -F 'ShowToolbar=false' \ -F 'ShowTooltip=false' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var embeddedCloneTemplateRequest = new EmbeddedCloneTemplateRequest() { TemplateId = "YOUR_TEMPLATE_ID", ViewOption = PageViewOption.PreparePage, ShowSaveButton = true, ShowPreviewButton = true, ShowNavigationButtons = true, EmbeddedSendLinkValidTill = DateTime.Now.AddDays(1), WithFormFieldValues = true, Locale = Locales.EN, ShowCreateButton = true, ShowToolbar = false, ShowTooltip = false, }; var embeddedClonedTemplate = templateClient.GetEmbeddedClonedTemplateUrl(embeddedCloneTemplateRequest); var templateEmbedUrl = embeddedClonedTemplate.embedUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(host="https://api.boldsign.com", api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) embedded_clone_template_request = boldsign.EmbeddedCloneTemplateRequest( ViewOption = "PreparePage", ShowSaveButton = true, ShowPreviewButton = true, ShowNavigationButtons = true, WithFormFieldValues = true, Locale = "EN", ShowCreateButton = true, ShowToolbar = false, ShowTooltip = false) embedded_cloned_template = template_api.get_embedded_cloned_template_url(template_id= "YOUR_TEMPLATE_ID", embedded_cloned_template_request=embedded_cloned_template_request) ``` PHP ```php setHost('https://api.boldsign.com'); $config->setApiKey('YOUR_API_KEY'); $template_api = new TemplateApi($config); $embedded_clone_template_request = new EmbeddedCloneTemplateRequest(); $embedded_clone_template_request->setShowToolbar(true); $embedded_clone_template_request->setShowTooltip(true); $embedded_clone_template_request->setShowSaveButton(true); $embedded_clone_template_request->setShowPreviewButton(false); $embedded_clone_template_request->setViewOption('PreparePage'); $embedded_clone_template_request->setWithFormFieldValues(true); $embedded_clone_template_request->setShowNavigationButtons(true); $embedded_cloned_template = $template_api->getEmbeddedClonedTemplateUrl($template_id = 'YOUR_TEMPLATE_ID', $embedded_clone_template_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setBasePath("https://api.boldsign.com"); client.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(client); EmbeddedCloneTemplateRequest embeddedCloneTemplateRequest = new EmbeddedCloneTemplateRequest(); embeddedCloneTemplateRequest.setShowToolbar(true); embeddedCloneTemplateRequest.setShowTooltip(true); embeddedCloneTemplateRequest.setShowSaveButton(true); embeddedCloneTemplateRequest.setShowPreviewButton(false); embeddedCloneTemplateRequest.setViewOption(embeddedCloneTemplateRequest.ViewOptionEnum.PREPARE_PAGE); embeddedCloneTemplateRequest.setWithFormFieldValues(true); embeddedCloneTemplateRequest.setShowNavigationButtons(true); EmbeddedClonedTemplate embeddedClonedTemplate = templateApi.getEmbeddedClonedTemplateUrl("YOUR_TEMPLATE_ID", embeddedCloneTemplateRequest); ``` NodeJS ```js import { TemplateApi, EmbeddedCloneTemplateRequest } from "boldsign"; const templateApi = new TemplateApi("https://api.boldsign.com"); templateApi.setApiKey("YOUR_API_KEY"); const embeddedCloneTemplateRequest = new EmbeddedCloneTemplateRequest(); embeddedCloneTemplateRequest.showToolbar = true; embeddedCloneTemplateRequest.showTooltip = true; embeddedCloneTemplateRequest.showSaveButton = true; embeddedCloneTemplateRequest.showPreviewButton = false; embeddedCloneTemplateRequest.viewOption = embeddedCloneTemplateRequest.ViewOptionEnum.PreparePage; embeddedCloneTemplateRequest.withFormFieldValues = true; embeddedCloneTemplateRequest.showNavigationButtons = true; const embeddedClonedTemplate = templateApi.getEmbeddedClonedTemplateUrl("YOUR_TEMPLATE_ID", embeddedCloneTemplateRequest); ``` {% /codetab %} ### Query parameters {% nestedtable %} - {% arguments name="templateId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the template to clone. {% /nestedtable %} ### Request body {% nestedtable %} - {% arguments name="RedirectURL" /%}{% batch datatype="string" /%} - The redirect URI is to be redirected after the clone template process is completed. The string should be in URI format. --- - {% arguments name="ViewOption" /%}{% batch datatype="string" /%} - Configures the initial view page to be loaded from the generated URL. The FillingPage is used to customize roles, enforce authentication etc. The PreparePage is used to configure form fields for the roles. Either PreparePage or FillingPage. Defaults to PreparePage. --- - {% arguments name="ShowSaveButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save and Close` button from the `More Action` drop down menu. Set to false if you don't want your users to save the template. Defaults to true. --- - {% arguments name="ShowCreateButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Save template` button at the top right corner of the page. Set to false if you don't want your users to save the template. Defaults to true. --- - {% arguments name="ShowPreviewButton" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Preview` button from the `More Action` drown down menu. Set to false if you don't want your users to preview the template before finalizing it. Defaults to true. --- - {% arguments name="ShowNavigationButtons" /%}{% batch datatype="boolean" /%} - Controls the visibility of the `Back` button. Set to false if you don't want your users to navigate away from the current page. Defaults to true. --- - {% arguments name="EmbeddedSendLinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 180 days can be assigned. The string should be in date-time format. --- - {% arguments name="WithFormFieldValues" /%}{% batch datatype="boolean" /%} - This property specifies whether form field values should be included when cloning the template. If set to true, the cloned template will contain the form field data; if set to false, the form fields will be excluded. --- - {% arguments name="Locale" /%}{% batch datatype="string" /%} - By default, while opening the embedded cloned template link, all the static contents available in the page will be loaded in the English language. This property is used to load the contents with different languages. The supported languages are EN(English), FR(French), NO(Norwegian), DE(German), ES(Spanish), BG(Bulgarian), CS(Czech), DA(Danish), IT(Italian), NL(Dutch), PL(Polish), PT(Portuguese), RO(Romanian), RU(Russian), and SV(Swedish) --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the document editor. Defaults to false. --- - {% arguments name="ShowTooltip" /%}{% batch datatype="boolean" /%} - To control the visibility of the `Tooltip` near the assignee field on the prepare page, set it to "true" if you want to show the tooltip to the user. Defaults to false. --- - {% arguments name="OnBehalfOf" /%}{% batch datatype="string" /%} - The email address of the user that was used to create the template on their behalf. {% /nestedtable %} ### Example response ```json { "templateId": "7a18c3y10...", "embedUrl": "https://app.boldsign.com/document/embed/?templateId=7a18c3y10..." } ``` --- # File: embedded-template\embed-in-an-iFrame.md # Embed Template in an iFrame The generated URL can be embedded within your website using the iFrame HTML element, and some parts of the embedded create template page can be controlled using client side triggers. ```html ``` ## Client side triggers Client side triggers are special commands that are used to control the embedded create template page loaded in your website's iFrame element. There are currently six triggers available, and they are listed, as follows. {% nestedtable %} - `onNextClick` - This trigger is used to move the embedded create template page from FillingPage to PreparePage. It will only function if the current page is FillingPage. --- - `onPreviewClick` - This trigger is used to navigate to the preview document page, where your user can view the document from each role's perspective. It will work only when the current page is PreparePage. --- - `onSaveClick` - This trigger is used to save the current state of the template without completing the template creation process. It does not finalize the template but allows you to save your progress as a draft. This trigger can be used when you want to continue working on the template at a later time. --- - `onSaveAndCloseClick` - This trigger is used to save the current state of the template as a draft and completes the template creation process. For this trigger, it is necessary to set the `ShowSaveButton` to `true` during the URL generate request, and current page should correspond to be the PreparePage. --- - `onCreateClick` - This trigger is used to finalize the template creation process. For this trigger, it is necessary to set the `ShowSendButton` to `true` during the URL generate request, and current page should correspond to the PreparePage. --- - `onPreviewExit` - This trigger is used to exit the preview document page and return to the PreparePage. {% /nestedtable %} **Usage** ```html
``` ```js ``` ## Client side events Client side event are special events that are triggered from the embedded request page to the host/parent (Your website). There are currently seven events available, listed as follows. {% nestedtable %} - `onDraftSavedSuccess` - This event will be triggered when the user selects the `Save & Close` option from the `More Action` drop-down menu and the template draft save process is successful. --- - `onDraftFailed` - This event is triggered when the user selects the `Save & Close` option from the `More Action` drop-down menu but the draft save process fails. --- - `onCreateSuccess` - This event will be triggered when the user clicks the `Create template` button and the template creation process is successful. --- - `onCreateFailed` - This event will be triggered when the user clicks the "Create template" button but the template creation process fails. --- - `onTemplateEditingCompleted` - This event will be triggered when the user clicks the `save template` button, and the template editing process is successful. --- - `onTemplateEditingFailed` - This event will be triggered when the user clicks the `save template` button, and the template editing process is failed. --- - `onLoadComplete` - This event will be triggered when the embedded page has finished loading. It is useful for performing actions after the page loading is complete. --- - `onPageNavigation` - This event is triggered when the user navigates to a different page within the embedded document flow. It is useful for tracking user progress across the Prepare, Filling, and Preview pages. {% /nestedtable %} **Usage** ```js ``` ## Best practices There are some best practices to follow when incorporating the embedded request URL into your application to provide the best user experience possible. - Allow BoldSign to take complete control of the browser window. - If you decide to use the iFrame sizing, ensure that recommended minimum width and height are 1360 and 768, respectively. Additionally, the embedded page supports responsive layouts, with mobile mode for widths less than 768, tab mode for widths between 768 and 1024, and desktop mode for widths above 1024. ## Webhooks Please refer to the {% customlink href="/webhooks/introduction" text="Webhooks" /%} article for information on subscribing to template events. If you have subscribed to the **Template Create** event, your URL will receive a webhook request when the template creation process is finished. You can synchronize any changes that were made in the embedded process within your application or database. --- # File: embedded-template\preview-embedded-template.md # Embedded template preview The embedded template preview link allows users to preview an already created template on your website or mobile app using an iFrame, popup window, or a new tab. ## Create embedded template preview URL {% post /%} {% path text="/v1/template/createEmbeddedPreviewUrl" /%} The create embedded template preview link includes additional properties to customize the embedded template preview process. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/createEmbeddedPreviewUrl?templateId=be5cbb00-xxxx-xxxx-xxxx-bafa580exxxx' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ShowToolbar=true' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key"); var templateClient = new TemplateClient(apiClient); var embeddedTemplatePreviewRequest = new EmbeddedTemplatePreviewRequest() { TemplateId = "be5cbb00-xxxx-xxxx-xxxx-bafa580exxxx", ShowToolbar = true, }; var embeddedTemplatePreview = await this.templateApi.CreateEmbeddedPreviewUrlAsync(embeddedTemplatePreviewRequest).ConfigureAwait(false); var templatePreviewUrl = embeddedTemplatePreview.TemplateUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key="YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) embedded_template_preview_request = boldsign.EmbeddedTemplatePreviewJsonRequest( show_toolbar=True ) preview_url_response = template_api.create_embedded_preview_url( template_id="Template_ID", embedded_template_preview_json_request=embedded_template_preview_request ) ``` PHP ```php setApiKey('YOUR_API_KEY'); $apiInstance = new BoldSign\Api\TemplateApi($config); $embedded_template_preview_request = new BoldSign\Model\EmbeddedTemplatePreviewJsonRequest(); $embedded_template_preview_request->setShowToolbar(true); $result = $apiInstance->createEmbeddedPreviewUrl("TEMPLATE_ID", $embedded_template_preview_request); ``` Java ```java ApiClient apiClient = Configuration.getDefaultApiClient(); apiClient.setApiKey("YOUR_API_KEY"); TemplateApi templateApi = new TemplateApi(apiClient); EmbeddedTemplatePreviewJsonRequest embeddedTemplatePreviewRequest = new EmbeddedTemplatePreviewJsonRequest(); embeddedTemplatePreviewRequest.setShowToolbar(true); EmbeddedTemplatePreview previewUrl = templateApi.createEmbeddedPreviewUrl("TEMPLATE_ID", embeddedTemplatePreviewRequest); ``` NodeJS ```js import { EmbeddedTemplatePreview, EmbeddedTemplatePreviewJsonRequest, TemplateApi } from "boldsign"; const templateApi = new TemplateApi(); templateApi.setApiKey("API_KEY"); var embeddedTemplatePreview = new EmbeddedTemplatePreviewJsonRequest(); embeddedTemplatePreview.showToolbar = true; var preview_url = templateApi.createEmbeddedPreviewUrl("TEMPLATE_ID", embeddedTemplatePreview); ``` {% /codetab %} ## Query parameters {% nestedtable %} - {% arguments name="templateId" /%}{% batch datatype="string" /%}{% required /%} - The ID of the template to preview. {% /nestedtable %} ## Request body {% nestedtable %} - {% arguments name="LinkValidTill" /%}{% batch datatype="string" /%} - Configures the expiration for the generated URL. A maximum of 30 days can be assigned. The string should be in date-time format. --- - {% arguments name="ShowToolbar" /%}{% batch datatype="boolean" /%} - Controls the visibility of the toolbar at the top of the template preview. Defaults to true. --- {% /nestedtable %} ## Example response ***200 Success*** ```json { "templateUrl": "https://app.boldsign.com/document/previewtemplate/?templateId=be5cbb00-xxxx-xxxx-xxxx-0exxxx-xxxx-f31e22cxxxxe;41e2041f-xxxx-xxxx-xxxx-xxxx-d36d4712xxxx" } ``` --- # File: group-signers\directories.md # Directories Directories are tags (categories) that you assign to **Contact Groups**. They are used by Group Signer settings to: - Filter which contact groups are available for selection. - Prevent accidental exposure of contact groups across teams within the same organization. - Support safe, scalable usage of Group Signers in embedded and API-driven flows. If you are new to Group Signers, start here: {% customlink href="/group-signers/introduction/" text="Group Signers" /%}. ## Requirement for Group Signers To use a contact group as a Group Signer, the contact group must have **at least one directory** assigned. - This applies to both newly created and existing contact groups. - If an existing contact group has no directories, you must assign a directory before using its `GroupId` in `Send Document` / `Create Template` requests. Directories are managed on contact groups **only via API**. Use the Contact Groups APIs to create or update a contact group with its directory values: - {% customlink href="/contactGroups/create-contactGroups/#create-contactgroup" text="Create Contact Group" /%} - {% customlink href="/contactGroups/update-contactGroup/" text="Update Contact Group" /%} ## How directories are used Directories are applied through `GroupSignerSettings.AllowedDirectories` when sending a document or creating/editing a template. - If `AllowedDirectories` is configured, only contact groups that belong to at least one allowed directory can be used as Group Signers. - If a contact group is not in an allowed directory, it will be restricted from use. This is especially important for embedded experiences where users can search and select contact groups. ## Limitations The following limitations apply when assigning directories to contact groups: - You can add a maximum of **5** directories to a contact group. - Each directory value can be up to **40 characters**. ## Recommended directory strategy To keep administration and access control straightforward: - Use directories that map to teams, departments, or business units (for example: `Finance`, `Legal`, `HR`). - In multi-tenant setups, prefer **UUID v4** directory values to avoid name collisions (example: `550e8400-e29b-41d4-a716-446655440000`). - Keep names stable over time; avoid per-user or temporary naming. - Treat directories as an access control boundary for Group Signer selection. ## Multi-tenancy Group Signers are designed with **strict sender isolation** to reduce cross-team access within an organization: - Senders can only use contact groups from directories that are allowed in their `GroupSignerSettings`. - Contact groups in disallowed directories are restricted from being used as signers. - This prevents accidental exposure of contact groups across teams. To make isolation robust at scale, use a **stable unique identifier** as the directory value (for example, the sender's **team ID** or **organization unit ID** in UUID v4 form). This reduces the risk of two teams independently choosing the same human-readable directory name (such as `Legal`) and unintentionally broadening access when `AllowedDirectories` is applied. --- # File: group-signers\introduction.md # Group Signers Group Signers allow you to use a Contact Group as a signer when sending documents or creating templates via the BoldSign API. This is useful when a signature request should be completed by any one member of a defined group (for example, “AccountsPayable”, “LegalReview”, or “HR”). When you configure a recipient as a Group Signer: - The recipient represents a _group_ (a single signer slot in the workflow). - A member from that group can complete the signing action. - Access to groups in embedded experiences can be restricted using **Directories** for safer, multi-team usage. To manage contact groups, use the BoldSign web app or the Contact Groups APIs. {% customlink href="/contactGroups/create-contactGroups/#create-contactgroup" text="Contact Groups API" /%} ## Prerequisites Before sending a document or creating a template with a Group Signer: 1. Create the contact group and add members (via web app or Contact Groups API). 2. Get the group's identifier (`GroupId`) (from the web app or from the {% customlink href="/contactGroups/list-contactGroups/" text="List Contact Groups API" /%}). 3. Assign at least one **Directory** to the contact group (see {% customlink href="/group-signers/directories/" text="Directories" /%}). This is **required** to use Group Signers, and directories are managed **only via API**. If you are using an existing contact group, make sure it has a directory assigned before you reference it in `Send Document` or `Create Template` requests. ## Configuration fields ### Recipient fields - **`SignType`** - Set to `Group` to indicate that this recipient is a contact group. - **`GroupId`** - The identifier of the contact group to use as the signer. These fields are documented in the Documents/Templates request models. For example: - {% customlink href="/documents/send-document/" text="Send Document API" /%} - {% customlink href="/template/create-template/" text="Create Template API" /%} ### Group Signer settings Add `GroupSignerSettings` in the request to control whether group signing is allowed and which groups are selectable: - **`Enabled`** - When `true`, group signers are allowed for the request. - **`AllowedDirectories`** - A list of directories used to filter which contact groups can be used. - See {% customlink href="/group-signers/directories/" text="Directories" /%}. This design makes Group Signers explicit: you must both (a) mark a recipient as a group and (b) allow group signers in settings. ## Embedded experience When **group signer settings are enabled**, BoldSign embedded experiences can allow the sender to add group recipients. Senders can search for and select contact groups that match the allowed directories. To protect data in multi-team organizations, the embedded UI will only show contact groups that match the configured `AllowedDirectories`. If no contact groups match, the embedded UI will show **no records found**. ## Minimal example The exact request payload varies by endpoint (send document, create template, etc.), but the relevant fields typically look like this: ```json { "groupSignerSettings": { "enabled": true, "allowedDirectories": ["Finance", "Legal", "8371b0a2-fd72-4651-9d2e-6f7828a51e2c"] }, "signers": [ { "signType": "Group", "groupId": "" } ] } ``` ## Common issues - **Group is not visible/selectable**: The group's directory is not included in `AllowedDirectories`. - **No groups are available**: No contact groups exist in the allowed directories, or group signers are not enabled. - **Incorrect group identifier**: The `GroupId` is invalid or not accessible to the sender. ## Related topics - {% customlink href="/contactGroups/list-contactGroups/" text="List Contact Groups" /%} - {% customlink href="/group-signers/directories/" text="Directories" /%} --- # File: how-to-guides\access-code-authentication-to-the-signer-after-sending-the-document.md # Add Access Code Authentication After Sending BoldSign allows you to add access code authentication even after a document has been sent for signature. To authenticate signers using an access code via the BoldSign API, set the `AuthenticationType` to `AccessCode` and specify a unique code (e.g., “1234”) in the `AccessCode` property. This access code will be required when the sender wishes to verify the signer's identity using a specific code. The access code should be communicated to the signer personally in advance. The following sample code snippets demonstrate how to add access code authentication for one of a document's recipients. ## Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={Your document id}" -H -H 'X-API-KEY: {Your API Key}' -H "Content-Type: application/json" -d "{\"accessCode\": \"345678\", \"authenticationType\": \"AccessCode\", \"emailId\": \"alexgayle@cubeflakes.com\"}" ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentclient = new DocumentClient(apiClient); await documentclient.AddAuthenticationAsync("{Your document id}", "alexgayle@cubeflakes.com", AuthenticationType.AccessCode, null, "45678").ConfigureAwait(false); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/addAuthentication?documentId={Your document id}" payload = json.dumps({ "accessCode": "j9089", "authenticationType": "AccessCode", "emailId": "alexgayle@cubeflakes.com" }) headers = { 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json' } response = requests.request("PATCH", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function addAuthentication() { try { const response = await axios.patch( 'https://api.boldsign.com/v1/document/addAuthentication', { accessCode: '823456', authenticationType: 'AccessCode', emailId: 'alexgayle@cubeflakes.com' }, { params: { documentId: '{Your document id}' }, headers: { 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } addAuthentication(); ``` PHP ```php false]); $headers = [ 'X-API-KEY' => '{Your API Key}', 'Content-Type' => 'application/json' ]; $body = '{ "accessCode": "456234", "authenticationType": "AccessCode", "emailId": "alexgayle@cubeflakes.com" }'; $request = new Request('PATCH', 'https://api.boldsign.com/v1/document/addAuthentication?documentId={Your document id}', $headers, $body); $res = $client->sendAsync($request)->wait(); echo $res->getBody(); ``` {% /codetab %} In the provided code examples, make sure to update the `authenticationType` to `AccessCode` and specify the unique value to the `accessCode`. Replace the `documentId` with the actual ID of the document you created and update `SignerEmail` with the signer's email address. After executing the code, the document will be secured with access code authentication, and the signer will only be able to access the document by providing the correct access code. --- # File: how-to-guides\accessing-older-documents.md # Sandbox Account Document Expiry Explained If you've noticed that you're no longer able to access older envelopes that you previously created in your sandbox account, this is an expected behavior with this account. Here's why: When you sign up for a free sandbox account with BoldSign, you gain access to an environment for testing and building integrations with BoldSign's electronic signature platform. It's important to note that this developer sandbox account has some specific characteristics: - **No permanent storage:** Your sandbox account is designed for testing purposes, and as such, it does not provide permanent storage for your documents. - **Document lifespan:** All documents signed within the sandbox account are automatically watermarked, and they are set to be deleted after 14 days of their creation. This ensures that your test data does not accumulate and remains in a controlled environment. Remember that while your sandbox account is not intended for long-term document storage, it provides a valuable platform for testing, development, and ensuring the smooth integration of BoldSign's electronic signature capabilities into your applications. --- # File: how-to-guides\add-checkbox-field.md # How to add Checkbox Form Fields Easily BoldSign supports the functionality to include checkboxes in your documents prior to sending them to the signer. This feature enables the signer to conveniently select one or more options from a provided list by simply clicking on the checkboxes. This enhances the efficiency and clarity of the document signing process, making it easier for all parties involved to communicate their preferences or choices effectively. ## Send a document to the signer with Checkbox fields: To send a document with a checkbox, set the `fieldType` as `CheckBox`. Here are some example codes you can use to set checkbox form fields: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "CheckBox", "name": "CheckBox", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 25, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var checkboxField = new FormField( id: "CheckBox", type: FieldType.CheckBox, isRequired: true, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 25, height: 25)); var formFieldCollections = new List() { checkboxField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) send_for_sign = boldsign.SendForSign( title = "Document SDK API", document_title = "SDK Document Test case", description = "Testing document from SDK integration test case", files = ["YOUR_FILE_PATH"], signers = [ boldsign.DocumentSigner( name = "Hanky", emailAddress = "hankyWhites@cubeflakes.com", signerOrder = 1, signerType = "Signer", formFields = [ boldsign.FormField( name = "CheckBox", fieldType = "CheckBox", font = "Helvetica", pageNumber = 1, isRequired = True, bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150) ) ], privateMessage = "This is private message for signer" ) ] ) document_created = document_api.send_document(send_for_sign) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $form_field = new FormField(); $form_field->setName('CheckBox'); $form_field->setFieldType('CheckBox'); $form_field->setPageNumber(1); $form_field->setFont('Helvetica'); $form_field->setIsRequired(true); $bounds = new Rectangle([50, 50, 100, 150]); $form_field->setBounds($bounds); $document_signer = new DocumentSigner(); $document_signer->setName('Hanky'); $document_signer->setEmailAddress('hankyWhites@cubeflakes.com'); $document_signer->setSignerType('Signer'); $document_signer->setSignerOrder(1); $document_signer->setFormFields([$form_field]); $document_signer->setPrivateMessage('This is private message for signer'); $send_for_sign = new SendForSign(); $documentInfo = new DocumentInfo(); $documentInfo->setTitle('Document SDK API'); $documentInfo->setDescription('Testing document from SDK integration test case'); $send_for_sign->setDocumentInfo([$documentInfo]); $files = new FileInfo(); $files = 'YOUR_FILE_PATH'; $send_for_sign->setFiles([$files]); $send_for_sign->setTitle('SDK Document Test case'); $send_for_sign->setSigners([$document_signer]); $document_created = $document_api->sendDocument($send_for_sign); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); FormField formField = new FormField(); formField.setName("CheckBox"); formField.setFieldType(FormField.FieldTypeEnum.CHECK_BOX); formField.setPageNumber(1); formField.setFont(FormField.FontEnum.HELVETICA); formField.setIsRequired(true); Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f); formField.setBounds(bounds); DocumentSigner signer = new DocumentSigner(); signer.setName("Hanky"); signer.setEmailAddress("hankyWhites@cubeflakes.com"); signer.setSignerOrder(1); signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER); signer.setFormFields(Arrays.asList(formField)); signer.setPrivateMessage("This is private message for signer"); SendForSign sendForSign = new SendForSign(); File file = new File("YOUR_FILE_PATH"); sendForSign.setFiles(Arrays.asList(file)); sendForSign.setTitle("SDK Document Test case"); sendForSign.setSigners(Arrays.asList(signer)); DocumentCreated documentCreated = documentApi.sendDocument(sendForSign); ``` NodeJS ```js import { DocumentApi, DocumentSigner, DocumentInfo, FormField, Rectangle, SendForSign } from "boldsign"; import * as fs from 'fs'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; const formField = new FormField(); formField.name = "CheckBox"; formField.fieldType = FormField.FieldTypeEnum.CheckBox; formField.font = FormField.FontEnum.Helvetica; formField.pageNumber = 1; formField.isRequired = true; formField.bounds = bounds; const documentSigner = new DocumentSigner(); documentSigner.name = "David"; documentSigner.emailAddress = "david@cubeflakes.com"; documentSigner.signerOrder = 1; documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer; documentSigner.formFields = [formField]; documentSigner.privateMessage = "This is private message for signer"; const files = fs.createReadStream("YOUR_FILE_PATH"); const sendForSign = new SendForSign(); const documentInfo = new DocumentInfo(); documentInfo.title = "SDK Document Test case"; documentInfo.description = "Testing document from SDK integration test case"; sendForSign.documentInfo = [documentInfo]; sendForSign.title = "Document SDK API"; sendForSign.signers = [documentSigner]; sendForSign.files = [files]; const documentCreated = documentApi.sendDocument(sendForSign); ``` {% /codetab %} In the above examples, make sure to replace `fieldType` with `CheckBox`. Execute the provided code, making sure to provide the necessary fields such as `Files,` `Title,` and `Signers.` By doing so, the document will be sent to the signers with the checkbox, allowing them to make a selection when signing. --- # File: how-to-guides\add-group-checkbox-to-a-document-via-BoldSign-API.md # How to Add Group Checkboxes to the Document Group Checkboxes allow you to apply validation rules across multiple checkbox fields, ensuring that users select a specified number of checkboxes within a group. This feature is particularly useful in scenarios like surveys or forms, where it's necessary to restrict or mandate the number of options a user can choose. Validation types in group checkboxes dictate how many checkboxes must be selected, enforcing conditions such as a minimum, maximum, or exact number of selections. This ensures that user input aligns with the desired criteria, improving the accuracy and consistency of the data collected. Following are the validation types available for group checkbox - **Maximum:** Specifies the maximum number of checkboxes that can be selected. - **Minimum:** Specifies the minimum number of checkboxes that must be selected, with the option to select more if needed. - **Absolute:** Specifies the exact number of checkboxes that must be selected. Both minimumCount and maximumCount should be the same. - **Range:** Allows a range of checkboxes to be selected between a minimum and maximum value. In this article, we'll explore how to add group checkbox fields to a document via the BoldSign API.Lets see the code examples as follows: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "title": "Send Document", "files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "signers": [ { "name": "{Signer name}", "signerOrder": 1, "emailAddress": "{Signer email}", "signerType": "Signer", "FormFields": [ { "fieldType": "CheckBox", "id": "check1", "pageNumber": 1, "bounds": { "X": 100, "Y": 100, "Width": 30, "Height": 30 }, "isRequired": true, "groupName": "checkgroup1" }, { "id": "check2", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "X": 130, "Y": 100, "Width": 30, "Height": 30 }, "isRequired": true, "groupName": "checkgroup1" }, { "fieldType": "CheckBox", "id": "check11", "pageNumber": 1, "bounds": { "X": 300, "Y": 300, "Width": 30, "Height": 30 }, "isRequired": true, "groupName": "checkgroup2" }, { "id": "check21", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "X": 350, "Y": 300, "Width": 30, "Height": 30 }, "isRequired": true, "groupName": "checkgroup2" } ] } ], "formGroups": [ { "maximumCount": 2, "groupNames": [ "checkgroup1" ], "groupValidation": "Maximum" }, { "minimumCount": 1, "groupNames": [ "checkgroup2" ], "groupValidation": "Minimum" } ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var formFields = new List(); formFields.Add(new FormField( name: "check1", type: FieldType.CheckBox, pageNumber: 1, bounds: new Rectangle(x: 200, y: 250, width: 30, height: 30))); formFields.Add(new FormField( name: "check2", type: FieldType.CheckBox, pageNumber: 1, bounds: new Rectangle(x: 230, y: 250, width: 30, height: 30))); formFields.Add(new FormField( name: "check3", type: FieldType.CheckBox, pageNumber: 1, bounds: new Rectangle(x: 200, y: 450, width: 30, height: 30))); formFields.Add(new FormField( name: "check4", type: FieldType.CheckBox, pageNumber: 1, bounds: new Rectangle(x: 230, y: 450, width: 30, height: 30))); formFields[0].GroupName = "checkGroup1"; formFields[1].GroupName = "checkGroup1"; formFields[2].GroupName = "checkGroup2"; formFields[3].GroupName = "checkGroup2"; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "ranjitha.amirthalingam+1@syncfusion.com", formFields: formFields); var documentSigners = new List() { signer }; var groupNames = new List() { "checkGroup1" }; var groupNames2 = new List() { "checkGroup2" }; var formGroups = new List() { new FormGroup(groupNames: groupNames, groupValidation: GroupValidation.Minimum) { MinimumCount = 1 }, new FormGroup(groupNames: groupNames2, groupValidation: GroupValidation.Maximum) { MaximumCount = 2 } }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, FormGroups = formGroups }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/send" payload = { "title": "Send Document", "files": ["data:application/pdf;base64,JVBERi0xLjcKJcfs..."], "signers": [ { "name": "{Signer name}", "signerOrder": 1, "emailAddress": "{Signer email}", "signerType": "Signer", "FormFields": [ { "fieldType": "CheckBox", "id": "check1", "pageNumber": 1, "bounds": {"X": 100, "Y": 100, "Width": 30, "Height": 30}, "isRequired": True, "groupName": "checkgroup1" }, { "id": "check2", "fieldType": "CheckBox", "pageNumber": 1, "bounds": {"X": 130, "Y": 100, "Width": 30, "Height": 30}, "isRequired": True, "groupName": "checkgroup1" }, { "fieldType": "CheckBox", "id": "check11", "pageNumber": 1, "bounds": {"X": 300, "Y": 300, "Width": 30, "Height": 30}, "isRequired": True, "groupName": "checkgroup2" }, { "id": "check21", "fieldType": "CheckBox", "pageNumber": 1, "bounds": {"X": 350, "Y": 300, "Width": 30, "Height": 30}, "isRequired": True, "groupName": "checkgroup2" } ] } ], "formGroups": [ { "maximumCount": 2, "groupNames": ["checkgroup1"], "groupValidation": "Maximum" }, { "minimumCount": 1, "groupNames": ["checkgroup2"], "groupValidation": "Minimum" } ] } headers = { "accept": "application/json", "X-API-KEY": "YOUR_API_KEY", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.text) ``` NodeJS ```js const axios = require("axios"); const fs = require("fs"); const payload = { title: "Send Document", files: ["data:application/pdf;base64,JVBERi0xLjcKJcfs..."], signers: [ { name: "{Signer name}", signerOrder: 1, emailAddress: "{Signer email}", signerType: "Signer", FormFields: [ { fieldType: "CheckBox", id: "check1", pageNumber: 1, bounds: { X: 100, Y: 100, Width: 30, Height: 30 }, isRequired: true, groupName: "checkgroup1", }, { id: "check2", fieldType: "CheckBox", pageNumber: 1, bounds: { X: 130, Y: 100, Width: 30, Height: 30 }, isRequired: true, groupName: "checkgroup1", }, { fieldType: "CheckBox", id: "check11", pageNumber: 1, bounds: { X: 300, Y: 300, Width: 30, Height: 30 }, isRequired: true, groupName: "checkgroup2", }, { id: "check21", fieldType: "CheckBox", pageNumber: 1, bounds: { X: 350, Y: 300, Width: 30, Height: 30 }, isRequired: true, groupName: "checkgroup2", }, ], }, ], formGroups: [ { maximumCount: 2, groupNames: ["checkgroup1"], groupValidation: "Maximum", }, { minimumCount: 1, groupNames: ["checkgroup2"], groupValidation: "Minimum", }, ], }; const response = await axios.post( "https://api.boldsign.com/v1/document/send", payload, { headers: { "Content-Type": "application/json", accept: "application/json", "X-API-KEY": "{your API key}", }, } ); console.log(response.data); ``` PHP ```php "Send Document", "files" => array("data:application/pdf;base64,JVBERi0xLjcKJcfs..."), "signers" => array( array( "name" => "{Signer name}", "signerOrder" => 1, "emailAddress" => "{Signer email}", "signerType" => "Signer", "FormFields" => array( array( "fieldType" => "CheckBox", "id" => "check1", "pageNumber" => 1, "bounds" => array("X" => 100, "Y" => 100, "Width" => 30, "Height" => 30), "isRequired" => true, "groupName" => "checkgroup1" ), array( "id" => "check2", "fieldType" => "CheckBox", "pageNumber" => 1, "bounds" => array("X" => 130, "Y" => 100, "Width" => 30, "Height" => 30), "isRequired" => true, "groupName" => "checkgroup1" ), array( "fieldType" => "CheckBox", "id" => "check11", "pageNumber" => 1, "bounds" => array("X" => 300, "Y" => 300, "Width" => 30, "Height" => 30), "isRequired" => true, "groupName" => "checkgroup2" ), array( "id" => "check21", "fieldType" => "CheckBox", "pageNumber" => 1, "bounds" => array("X" => 350, "Y" => 300, "Width" => 30, "Height" => 30), "isRequired" => true, "groupName" => "checkgroup2" ) ) ) ), "formGroups" => array( array( "maximumCount" => 2, "groupNames" => array("checkgroup1"), "groupValidation" => "Maximum" ), array( "minimumCount" => 1, "groupNames" => array("checkgroup2"), "groupValidation" => "Minimum" ) ) ); $options = array( 'http' => array( 'header' => "Content-type: application/json\r\n" . "accept: application/json\r\n" . "X-API-KEY: YOUR_API_KEY\r\n", 'method' => 'POST', 'content' => json_encode($data), ), ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($result === FALSE) { // Handle error } print_r($result); ?> ``` {% /codetab %} By updating group checkboxes with validation, you control user interactions, ensuring they comply with required conditions for document signing. --- # File: how-to-guides\add-radio-button-field.md # Add Radio Button Field A radio button allows a signer to select only one option from a predefined list of choices. When presented as a group, selecting one radio button will automatically deselect any previously selected option within that group, ensuring that only one option can be chosen at a time. BoldSign provides support for adding radio buttons to your document before sending it to the signer, enabling them to make a choice by clicking on the radio button. ## Send a document with radio buttons To send a document with a radio buttons, set the `fieldType` as `RadioButton`. Additionally, you need to specify a `groupName` to group related radio buttons together. Here are example codes that demonstrate how to achieve this: ### Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message=' \ -F 'Signers= { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "RadioButton", "groupName": "Group1", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 20, "height": 20 }, "isRequired": true }, { "id": "string1", "name": "string1", "fieldType": "RadioButton", "groupName": "Group1", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 20, "height": 20 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var radioButton1 = new RadioButtonField( id: "Radio1", isRequired: true, groupName: "Group1", pageNumber: 1, bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20)); var radioButton2 = new RadioButtonField( id: "Radio2", isRequired: true, groupName: "Group1", pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 20, height: 20)); var formFieldCollections = new List() { radioButton1, radioButton2 }; var signer = new DocumentSigner( signerName: "Signer Name 1", signerType: SignerType.Signer, signerEmail: "signer1@email.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "RadioButton", "groupName": "Group1", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 20, "height": 20 }, "isRequired": True }, { "id": "string1", "name": "string1", "fieldType": "RadioButton", "groupName": "Group1", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 20, "height": 20 }, "isRequired": True } ], "locale": "EN" } payload = { 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( '{file name}', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Message', ''); data.append('Signers', '\n {\n "name": "Hanky",\n "emailAddress": "hankyWhites@cubeflakes.com",\n "signerType": "Signer",\n "formFields": [\n {\n "id": "string",\n "name": "string",\n "fieldType": "RadioButton",\n "groupName": "Group1",\n "pageNumber": 1,\n "bounds": {\n "x": 50,\n "y": 50,\n "width": 20,\n "height": 20\n },\n "isRequired": true\n },\n {\n "id": "string1",\n "name": "string1",\n "fieldType": "RadioButton",\n "groupName": "Group1",\n "pageNumber": 1,\n "bounds": {\n "x": 100,\n "y": 100,\n "width": 20,\n "height": 20\n },\n "isRequired": true\n }\n ],\n "locale": "EN"\n }'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above examples, make sure to replace `fieldType` with `RadioButton` and specify a `groupName` to group related radio buttons. Execute the provided code, making sure to provide the necessary fields such as `Files,` `Title,` and `Signers.` By doing so, the document will be sent to the signers with the radio buttons, allowing them to make a selection when signing. ## Send a document with radio button form field using a definition tag For the information about the definition tags, please refer to the documentation: {% customlink href="/text-tags/advanced-usage/" text="Definition tags" /%} ### Code snippet using a definition tag {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ url -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'X-API-KEY: {your-api-key}' \ -F 'Title=Sent from API Curl' \ -F 'Message=This is document message sent from API Curl' \ -F 'EnableSigningOrder=false' \ -F 'Signers[0][Name]=Signer Name 1' \ -F 'Signers[0][EmailAddress]=luthercooper@cubeflakes.com' \ -F 'Signers[0][SignerOrder]=1' \ -F 'UseTextTags=true' \ -F 'TextTagDefinitions[0][DefinitionId]=tag1' \ -F 'TextTagDefinitions[0][Type]=RadioButton' \ -F 'TextTagDefinitions[0][SignerIndex]=1' \ -F 'TextTagDefinitions[0][IsRequired]=True' \ -F 'TextTagDefinitions[0][RadioGroupName]=string' \ -F 'TextTagDefinitions[0][Size][Width]=20' \ -F 'TextTagDefinitions[0][Size][Height]=20' \ -F 'TextTagDefinitions[0][FieldId]=axq12367' \ -F 'TextTagDefinitions[1][DefinitionId]=tag2' \ -F 'TextTagDefinitions[1][Type]=RadioButton' \ -F 'TextTagDefinitions[1][SignerIndex]=1' \ -F 'TextTagDefinitions[1][IsRequired]=True' \ -F 'TextTagDefinitions[1][RadioGroupName]=string' \ -F 'TextTagDefinitions[1][Size][Width]=20' \ -F 'TextTagDefinitions[1][Size][Height]=20' \ -F 'TextTagDefinitions[1][FieldId]=eq1267' \ -F 'Files=@{your file};type=application/pdf' \ ``` C# ```csharp ApiClient apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); DocumentClient documentClient = new DocumentClient(apiClient); // Directly provide file path of the document. var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{your file}" }; // Creating collection with all loaded documents. var filesToUpload = new List { documentFilePath, }; var signer = new DocumentSigner( signerName: "Signer Name 1", signerType: SignerType.Signer, signerEmail: "signer1@email.com", locale: Locales.EN); // Adding the signer to the collection. var documentSigners = new List { signer }; TextTagDefinition textTagDefinition = new TextTagDefinition( definitionId: "tag1", type: FieldType.RadioButton, size: new Size( width: 20, height: 20), signerIndex: 1, isRequired: true, radioGroupName: "Group1" ); TextTagDefinition textTagDefinition1 = new TextTagDefinition( definitionId: "tag2", type: FieldType.RadioButton, size: new Size( width: 20, height: 20), signerIndex: 1, isRequired: true, radioGroupName: "Group1" ); var textTagDefinitions = new List { textTagDefinition, textTagDefinition1 }; // Create send for sign request object. var sendForign = new SendForSign { Title = "Sent from BoldSign API SDK", Message = "This is document message sent from API SDK", EnableSigningOrder = false, Files = filesToUpload, Signers = new List { signer }, // Enabling this property will convert text tags in the document to UI form fields. UseTextTags = true, TextTagDefinitions = textTagDefinitions, }; // Send the document for signing. var createdDocumentResult = await documentClient.SendDocumentAsync(sendForign).ConfigureAwait(false); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/send" payload={'Title': 'Sent from API Curl', 'Message': 'This is document message sent from API Curl', 'EnableSigningOrder': 'false', 'Signers[0][Name]': 'Signer Name 1', 'Signers[0][EmailAddress]': 'luthercooper@cubeflakes.com', 'Signers[0][SignerOrder]': '1', 'Signers[0][SignerType]': 'Signer', 'UseTextTags': 'true', 'TextTagDefinitions[0][DefinitionId]': 'tag1', 'TextTagDefinitions[0][Type]': 'RadioButton', 'TextTagDefinitions[0][SignerIndex]': '1', 'TextTagDefinitions[0][IsRequired]': 'True', 'TextTagDefinitions[0][RadioGroupName]': 'string', 'TextTagDefinitions[0][Size][Width]': '20', 'TextTagDefinitions[0][Size][Height]': '20', 'TextTagDefinitions[0][FieldId]': 'axq12367', 'TextTagDefinitions[1][DefinitionId]': 'tag2', 'TextTagDefinitions[1][Type]': 'RadioButton', 'TextTagDefinitions[1][SignerIndex]': '1', 'TextTagDefinitions[1][IsRequired]': 'True', 'TextTagDefinitions[1][RadioGroupName]': 'string', 'TextTagDefinitions[1][Size][Width]': '20', 'TextTagDefinitions[1][Size][Height]': '20', 'TextTagDefinitions[1][FieldId]': 'eq1267'} files=[ ('Files',('file',open('{your file}','rb'),'application/pdf')) ] headers = { 'X-API-KEY': '{your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('Title', 'Sent from API Curl'); form.append('Message', 'This is document message sent from API Curl'); form.append('EnableSigningOrder', 'false'); form.append('Signers[0][Name]', 'Signer Name 1'); form.append('Signers[0][EmailAddress]', 'luthercooper@cubeflakes.com'); form.append('Signers[0][SignerOrder]', '1'); form.append('Signers[0][SignerType]', 'Signer'); form.append('UseTextTags', 'true'); form.append('TextTagDefinitions[0][DefinitionId]','tag1'); form.append('TextTagDefinitions[0][Type]','RadioButton'); form.append('TextTagDefinitions[0][SignerIndex]','1'); form.append('TextTagDefinitions[0][IsRequired]','true'); form.append('TextTagDefinitions[0][Size][Width]','20'); form.append('TextTagDefinitions[0][Size][Height]','20'); form.append('TextTagDefinitions[0][RadioGroupName]', 'string') form.append('TextTagDefinitions[1][FieldId]','axq12367'); form.append('TextTagDefinitions[1][DefinitionId]','tag2'); form.append('TextTagDefinitions[1][Type]','RadioButton'); form.append('TextTagDefinitions[1][SignerIndex]','1'); form.append('TextTagDefinitions[1][IsRequired]','true'); form.append('TextTagDefinitions[1][Size][Width]','20'); form.append('TextTagDefinitions[1][Size][Height]','20'); form.append('TextTagDefinitions[1][RadioGroupName]', 'string') form.append('TextTagDefinitions[1][FieldId]','eq1267'); form.append('Files', fs.createReadStream('{your file}')); const response = await axios.post( ' https://api.boldsign.com/v1/document/send', form, { headers: { accept: 'application/json', 'X-API-KEY': '{Your API key}', ...form.getHeaders() } } ); ``` {% /codetab %} Replace the placeholders (`{your API key}`, `{your file},` etc.) with your actual data. Specify the `Type` as `Radiobutton` and specify a `GroupName` to group related radio buttons. Specify `DefinitionId` with the id present in the document. After execution, a document will be created and sent to the signer's email with radio buttons added in the tag present in the document. For a visual reference, please take a look at the radio buttons located in the document, as shown in the following image. ![Step 1](/static/images/guides/add-radio-button-field/step1.webp) --- # File: how-to-guides\add-sms-authentication.md # How to Add SMS Authentication for Signers To add SMS authentication to signature requests which verifies the signer with the SMS OTP, you need to include `AuthenticationType` as `SMSOTP`. It is also mandatory to add `CountryCode` and `Number` for SMS authentication. To enable SMS verification, you need to include the above parameters to the following endpoints: 1. `v1/document/send` 2. `v1/document/createEmbeddedRequestUrl` If you are sending a document using template, you need to include those parameters to the following endpoints: 1. `v1/template/send` 2. `v1/template/createEmbeddedRequestUrl` {% highlight %} It's important to note that SMS authentication can be added to the document only for paid plans.{% /highlight %} ## Sending a document to the signer with SMS authentication To send a document to the signer with SMS authentication, follow these steps: Use one of the example code snippets below, depending on your preferred programming language. ### Code Snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "authenticationType": "SMSOTP", "phoneNumber": { "countryCode": "{Signer country code}", "number": "{Signer phone number}" }, "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( name: "David", emailAddress: "david@cubeflakes.com", authenticationType: AuthenticationType.SMSOTP, phoneNumber: new PhoneNumber( countryCode: "{Signer country code}", number: "{Signer phone number}"), formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "authenticationType": "SMSOTP", "phoneNumber": { "countryCode": "{Signer country code}", "number": "{Signer phone number}" }, "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); const signerData = { name: 'hanky', emailAddress: 'hankyWhites@gmail.com', signerType: 'Signer', signerRole: 'Signer', authenticationType: 'SMSOTP', phoneNumber: { countryCode: '{Signer country code}', number: '{Signer phone number}' }, formFields: [ { id: 'signature', name: 'signature', fieldType: 'Signature', pageNumber: 1, bounds: { x: 100, y: 100, width: 200, height: 200 }, isRequired: true } ], locale: 'EN' }; data.append('Signers', JSON.stringify(signerData)); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { accept: 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data: data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} Replace the values (`Files,` `Signers,` etc.) with the actual values. Set the value for `authenticationType` as `SMSOTP,` and provide values for `countryCode` and `number` with the signer's country code and phone number. Upon execution, the document will be created with SMS athentication, and a document ID will be generated. ## Accessing the SMS authenticated document - When the signer opens the document link, they will see a "Send OTP" button. Clicking this button will trigger the sending of an OTP to the signer via SMS. ![Step 1](/static/images/guides/sms-otp/step1.webp) - After the signer enters the OTP and clicks the "Verify" button, the document will open, and the signer can start the signing process. ![Step 2](/static/images/guides/sms-otp/step2.webp) --- # File: how-to-guides\add-validation-to-textbox-field.md # How to Add Validation to Textbox Field When using the textbox form field, you have the option to include validation based on your needs, which will specify the type of text that signers can enter in the field. The available options are only numbers, regex, currency, email, and none. • **Only Numbers**: Signers can only enter numeric numbers in the textbox area. • **Regex**: Customize the validation by selecting the regex option, entering the desired regex value, and adding a description to inform signers of the needed format. • **Email**: Restrict email input to the textbox area. • **Currency**: The signer can only input currency values in the textbox area. ## Adding Only Numbers Validation using API The following sample code snippet demonstrates how to add only number validation to a textbox field: **Code snippet** {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message={your message}' \ -F 'Signers={ "name": "starvritsa", "emailAddress": "starvritsabuhungi@boldsign.dev", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "Textbox", "pageNumber": 1, "bounds": { "x": 140, "y": 140, "width": 82, "height": 32 }, "isRequired": true, "validationType": "NumbersOnly" } ] }' \ -F 'Files=@{Your file path};type=application/pdf' \ -F 'Title={Document title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: Type.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50), validationType: "NumbersOnly"); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "starvritsabuhungi@boldsign.dev", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "starvritsabuhungi@boldsign.dev.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True, "validationType":"NumbersOnly" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Agreement", } files = [ ('Files', ('{file name}', open('{file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "starvritsa",\r\n "emailAddress": "starvritsabuhungi@syncfusion.com",\r\n "signerType": "Signer", \r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "textbox1",\r\n "name": "textbox1",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true,\r\n "validationType":"NumbersOnly"\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{you file path}')); data.append('Title', 'Node JS validation'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{your api key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} ## Adding Email Validation to Textbox field using API The following sample code snippet demonstrates how to add Email validation to a textbox field: **Code snippet** {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message={your message}' \ -F 'Signers={ "name": "starvritsa", "emailAddress": "starvritsabuhungi@boldsign.dev", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "Textbox", "pageNumber": 1, "bounds": { "x": 140, "y": 140, "width": 82, "height": 32 }, "isRequired": true, "validationType": "EmailAddress" } ] }' \ -F 'Files=@{Your file path};type=application/pdf' \ -F 'Title={Document title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: Type.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50), validationType: "EmailAddress"); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "starvritsabuhungi@boldsign.dev", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "starvritsabuhungi@boldsign.dev.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True, "validationType":"EmailAddress" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Agreement", } files = [ ('Files', ('{file name}', open('{file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "starvritsa",\r\n "emailAddress": "starvritsabuhungi@syncfusion.com",\r\n "signerType": "Signer", \r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "textbox1",\r\n "name": "textbox1",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true,\r\n "validationType":"EmailAddress"\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{you file path}')); data.append('Title', 'Node JS validation'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{your api key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} ## Adding Currency Validation to Textbox field using API The following sample code snippet demonstrates how to add Currency validation to a textbox field: **Code snippet** {% codetab id="codetab3" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message={your message}' \ -F 'Signers={ "name": "starvritsa", "emailAddress": "starvritsabuhungi@boldsign.dev", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "Textbox", "pageNumber": 1, "bounds": { "x": 140, "y": 140, "width": 82, "height": 32 }, "isRequired": true, "validationType": "Currency" } ] }' \ -F 'Files=@{Your file path};type=application/pdf' \ -F 'Title={Document title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: Type.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50), validationType: "Currency"); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "starvritsabuhungi@boldsign.dev", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "starvritsabuhungi@boldsign.dev.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True, "validationType":"Currency" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Agreement", } files = [ ('Files', ('{file name}', open('{file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "starvritsa",\r\n "emailAddress": "starvritsabuhungi@syncfusion.com",\r\n "signerType": "Signer", \r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "textbox1",\r\n "name": "textbox1",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true,\r\n "validationType":"Currency"\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{you file path}')); data.append('Title', 'Node JS validation'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{your api key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} ## Adding Regex Validation to Textbox field using API The following sample code snippet demonstrates how to add numbers only Regex validation to a textbox field: **Code snippet** {% codetab id="codetab4" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message={your message}' \ -F 'Signers={ "name": "starvritsa", "emailAddress": "starvritsabuhungi@boldsign.dev", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "Textbox", "pageNumber": 1, "bounds": { "x": 140, "y": 140, "width": 82, "height": 32 }, "isRequired": true, "validationType": "CustomRegex", "validationCustomRegex": "^\\d+$", "validationCustomRegexMessage": "Enter numbers only" } ] }' \ -F 'Files=@{Your file path};type=application/pdf' \ -F 'Title={Document title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: Type.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50), validationType: "CustomRegex", validationCustomRegex: "^\\d+$", validationCustomRegexMessage: "Enter numbers only"); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "starvritsabuhungi@boldsign.dev", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "starvritsabuhungi@boldsign.dev.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "textbox1", "name": "textbox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True, "validationType":"CustomRegex", "validationCustomRegex":"^\\d+$", "validationCustomRegexMessage":"Enter numbers only" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Agreement", } files = [ ('Files', ('{file name}', open('{file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "starvritsa",\r\n "emailAddress": "starvritsabuhungi@syncfusion.com",\r\n "signerType": "Signer", \r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "textbox1",\r\n "name": "textbox1",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true,\r\n "validationType":"CustomRegex",\r\n "validationCustomRegex":"^\\d+$",\r\n "validationCustomRegexMessage":"Enter numbers only"\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{you file path}')); data.append('Title', 'Node JS validation'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{your api key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} --- # File: how-to-guides\allow-signers-to-reassign.md # How to Allow Signers to Reassign Documents When sending documents for signatures via BoldSign, you might encounter scenarios where a signer wishes to reassign the document to another person. BoldSign provides a feature that allows signers to reassign the document to someone else. ## Enable signer's ability to reassign the document When you want to allow signers to reassign documents, include the `EnableReassign` property set to `true` in your `send` API call. Here are code examples demonstrating how to achieve this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'EnableReassign= true' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", EnableReassign = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'EnableReassign': True, 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('EnableReassign', 'true'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} By setting the `EnableReassign` property to true, you ensure that signers have the option to reassign the document to another person. Make sure to execute the above code and provide the necessary fields such as `Files,` `Title,` and `Signers.` This approach allows signers to reassign the document as needed. --- # File: how-to-guides\apply-brand-to-the-documents-using-API.md # Apply branding to documents using API The branding feature in BoldSign empowers you to personalize the appearance of emails sent to recipients, including elements like logos, background colors, and button colors. BoldSign also supports the creation of multiple brands within the same account. ### 1. Create a brand in the web app or API To create a brand using the web app, follow the guide on how to [Create a Brand in the BoldSign Web App](https://support.boldsign.com/kb/article/616/how-to-send-a-document-with-your-brand-identity) If you prefer to create a brand using the API, refer to the guide [Create a Brand via API](https://developers.boldsign.com/branding/create-brand/). ### 2. Applying the branding ID to the document After successfully creating a brand, a brand ID will be generated. This brand ID will be used to associate the brand with a specific document. Here are example codes that you can use for this purpose: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'BrandId= {your brand ID}' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "Signer Name 1", signerType: SignerType.Signer, signerEmail: "signer1@email.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", BrandId = "{your brand ID}", Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'BrandId': '{Your Brand Id}', 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('BrandId', '{Your Brand Id}'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false ]); $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; $url = "https://api.boldsign.com/v1/document/send"; $signer_data = [ "name" => "hanky", "emailAddress" => "hankyWhites@cubeflakes.com", "signerType" => "Signer", "formFields" => [ [ "id" => "sign1", "name" => "sign", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 50, "y" => 50, "width" => 200, "height" => 25 ], "isRequired" => true ] ], "locale" => "EN" ]; $payload = [ 'Message' => 'Please sign this.', 'Title' => 'Sample document', 'BrandId' => '18779cd3-xxxx-xxxx-883e-4d9ead5c699a', 'Signers' => json_encode($signer_data), ]; // File path $file_path = '{Your file path}'; // Prepare multipart form data $multipart = []; foreach ($payload as $name => $content) { $multipart[] = [ 'name' => $name, 'contents' => $content ]; } $multipart[] = [ 'name' => 'Files', 'contents' => fopen($file_path, 'r'), 'filename' => basename($file_path) ]; $request = new Request('POST', $url, $headers, new MultipartStream($multipart)); $response = $client->send($request); echo $response->getBody(); ?> ``` {% /codetab %} In the above example, replace `BrandId` with the actual brand ID that you want to apply to the document. Execute the curl command while ensuring to provide the necessary fields such as `Files,` `Title,` and `Signers.` By doing so, the desired brand will be seamlessly applied to the created document. Subsequently, the signer will receive an email containing the brand logo, and the same brand logo will be prominently displayed on the signing page of the document. For a visual reference, please take a look at the branding logo located in the top left corner of the document, as shown in the following image. ![Step 1](/static/images/guides/apply-brand-to-documents/step1.png) --- # File: how-to-guides\asynchronous-operation-in-document-creation.md # Check Document & Template Readiness for Signing When you create a document or template using BoldSign's APIs, you receive a document or template ID immediately, even though the document or template creation is not yet completed. This is because BoldSign uses an asynchronous process to create documents and templates. ## Why do I receive an ID before the document or template is completely ready? Our document processing operates asynchronously. The asynchronous process allows you to start working on other tasks while BoldSign creates your document or template in the background. This can save you time and improve your workflow. When you initiate the document creation process through the [v1/document/send](https://developers.boldsign.com/documents/send-document/) endpoint or the template creation process through the [v1/template/create](https://developers.boldsign.com/documents/send-document-from-template/) endpoint, you receive a document ID or a template ID immediatly. However, the actual processing of the uploaded files and the creation of the document or template occur in the background. During this background processing, we perform a comprehensive validation for the provided inputs and parameters. ## How do I know when my document or template is ready? We strongly recommend configuring webhooks to receive notifications about the completion of document or template creation. Webhooks will inform you of any errors encountered during the processing stage. Similarly, if the document or template creation is successful, you will also receive notifications via webhooks. To get more information about webhooks, please refer to this documentation: [Introduction about webhooks](https://developers.boldsign.com/webhooks/introduction/) To set up callbacks on your local machine, please refer to this documentation: [Listen for callbacks](https://developers.boldsign.com/webhooks/listen-for-callback/). For information about the events available in BoldSign, consult this documentation: [Sample event data](https://developers.boldsign.com/webhooks/sample-event-data/). --- # File: how-to-guides\change-recipient-of-the-document.md # Change the Recipient of a Document In the event that you've sent a document to an incorrect signer and the document remains unsigned, there's no need to worry. BoldSign provides a straightforward option to change the recipient. This guide outlines the steps to effectively modify the recipient of a document. BoldSign provides an API that allows you to programmatically change the recipient of a document. The following are the code examples in different programming languages to assist you in achieving this task: ## Code snippet {% codetab %} cURL ```shell curl -X 'PATCH' \ 'https://api.boldsign.com/v1/document/changeRecipient?documentId={Your document Id}' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "newSignerName": "{New signer name}", "reason": "{Reason to change signer}", "newSignerEmail": "{Old signer email}", "oldSignerEmail": "{New signer email}" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); documentClient.ChangeRecipient("{Your document Id}", "{Old signer email}", "{Reason to change signer}", "{New signer name}", "{New signer email}"); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/changeRecipient?documentId={Your document Id}" payload = json.dumps({ "newSignerName": "{New signer name}", "reason": "{Reason to change signer}", "newSignerEmail": "{New signer email}", "oldSignerEmail": "{Old signer email}" }) headers = { 'X-API-KEY': '{your API key}', 'Content-Type': 'application/json' } response = requests.request("PATCH", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); let data = JSON.stringify({ "newSignerName": "{New signer name}", "reason": "{Reason to change signer}", "newSignerEmail": "{New signer email}", "oldSignerEmail": "{Old signer email}" }); let config = { method: 'patch', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/changeRecipient?documentId={Your document Id}', headers: { 'X-API-KEY': '{your API key}', 'Content-Type': 'application/json' }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/document/changeRecipient?documentId={Your document Id}"; $payload = [ 'json' => [ 'newSignerName' => '{New signer name}', 'reason' => '{Reason to change signer}', 'newSignerEmail' => '{New signer email}', 'oldSignerEmail' => '{Old signer email}' ] ]; $headers = [ 'headers' => [ 'X-API-KEY' => '{Your API Key}', 'Content-Type' => 'application/json' ] ]; $response = $client->patch($url, array_merge($payload, $headers)); echo $response->getBody(); ``` {% /codetab %} In the above example, replace the `documentId` with the ID of the document you created earlier. Then, update the `newSignerName,` `newSignerEmail,` `oldSignerEmail,` and `reason` properties with the appropriate values. By using these code snippets, the recipient of the document will be updated, and an email will be sent to the new signer containing the signing link for the document. --- # File: how-to-guides\change-the-access-code-via-API.md # How to Change Access Code for the Signer BoldSign provides various authentication methods to verify a signer's identity, including Email OTP (One-Time Password), SMS OTP (One-Time Password), Access Code, and ID verification. These methods can be applied to signers during the document creation process. If you have configured access code authentication and sent the document, you might need to update the access code for the signer after the document has been dispatched. BoldSign allows for updating the access code even after the document has been sent. Please note that only the sender has the authority to modify the access code for the document. Below is an example code snippet demonstrating how to update the access code for a specific recipient of a document. ## Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/changeAccessCode?documentId={Your document id}&emailId=alexgayle@cubeflakes.com" -H 'X-API-KEY:{Your API Key}' -H "Content-Type: application/json" -d "{\"accessCode\": \"123456\"}" ``` C# ```csharp using BoldSign.Api; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentclient = new DocumentClient(apiClient); await documentclient.ChangeAccessCodeAsync("{Your document id}", "alexgayle@cubeflakes.com","56789").ConfigureAwait(false; ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/changeAccessCode?documentId={Your document id}&emailId=alexgayle@cubeflakes.com" payload = json.dumps({ "accessCode": "78996" }) headers = { 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json' } response = requests.request("PATCH", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function ChangeAccessCode() { try { const response = await axios.patch( 'https://api.boldsign.com/v1/document/changeAccessCode?documentId={Your document id}&emailId=alexgayle@cubeflakes.com', { accessCode:"124410" }, { headers: { 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json' } } ); return response; } catch (error) { console.error('Error:', error.message); throw error; } } ChangeAccessCode(); ``` PHP ```php false ]); $documentId = '{Your document id}'; // Replace with your document ID $apiKey = '{Your API Key}'; // Replace with your API key $emailId = 'alexgayle@cubeflakes.com'; $url = "https://api.boldsign.com/v1/document/changeAccessCode?documentId={$documentId}&emailId={$emailId}"; $payload = json_encode([ 'accessCode' => '88356' ]); $response = $client->request('PATCH', $url, [ 'headers' => [ 'X-API-KEY' => $apiKey, 'Content-Type' => 'application/json' ], 'body' => $payload ]); echo $response->getBody(); ``` {% /codetab %} In the provided code examples, make sure to update the `documentId` with the actual ID of the document you created and the `emailId` with the signer's email address. After executing the code, the access code for the signature request document will be updated. The recipient will need to provide the latest access code to access the document. --- # File: how-to-guides\combine-audit-trail-and-signed-document-API.md # Combine Audit Trail and Signed Document BoldSign provides the option to combine an audit trail with the signed document using its API. The following are the detailed instructions on how to effectively combine signed documents with their corresponding audit trails using the API: ## Creating a brand with combine audit trail option To initiate the process, you need to create a brand with `Combine Audit Trail` option enabled. This configuration will ensure that both the audit trail and the signed document are combined in the final output. Here are example codes that can be used to do this: ### Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/brand/create' \ -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'X-API-KEY: {your API key}' \ -F 'CombineAuditTrail=true' \ -F 'BrandLogo={Your logo file}' \ -F 'BrandName={Your brand Name}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", " {your API key}"); var brandingClient = new BrandingClient(apiClient); var brandSettings = new BrandSettings() { BrandName = "{Your brand Name}", BrandLogo = new DocumentFileBytes { ContentType = "image/png", FileName = "{your logo file}", }, CombineAuditTrail = true }; BrandingData brandingData = await brandingClient.CreateBrandAsync(brandSettings).ConfigureAwait(false); string brandId = brandingData.BrandId; ``` Python ```python import requests url = "https://api.boldsign.com/v1/brand/create" payload = { 'CombineAuditTrail': 'true', 'BrandName': 'Syncfusion' } files = [ ('BrandLogo',('{file name}',open('{Your logo file}','rb'),'image/png')) ] headers = { 'accept': 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY': '{your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('CombineAuditTrail', 'true'); data.append('BrandLogo', fs.createReadStream('{Your logo file}')); data.append('BrandName', '{Your brand Name}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/brand/create', headers: { 'accept': 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY': '{your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/brand/create"; $payload = [ [ 'name' => 'CombineAuditTrail', 'contents' => 'true' ], [ 'name' => 'BrandName', 'contents' => 'Test' ], [ 'name' => 'BrandLogo', 'contents' => fopen('{Your file path}', 'r'), 'filename' => '{Your file name}', 'headers' => [ 'Content-Type' => 'image/png' ] ] ]; $headers = [ 'accept' => 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY' => '{Your API Key}' ]; $response = $client->post($url, [ 'multipart' => $payload, 'headers' => $headers ]); echo $response->getBody(); ``` {% /codetab %} In the provided example, the crucial step is setting the `CombineAuditTrail` parameter to true, enabling the combination of the audit trail and the signed document. Ensure that you input the necessary details, such as `BrandName` and `BrandLogo`. The brand logo must be in formats like JPG, JPEG, or PNG. Execute the above to create a brand with the `Combine Audit Trail` option enabled. ## Send document with the brand with combine audit trail Once you have a brand with the combine audit trail option enabled, proceed to create a document using the API. Associate the brand with the desired combination of the audit trail and the signed document. ### Code snippet to create a document with combine audit trail and signed document {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'BrandId= {your brand ID}' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "agreement.pdf", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", BrandId = "{your brand ID}", Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'BrandId': '{Your Brand Id}', 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('BrandId', '{Your Brand Id}'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the provided example, replace `BrandId` with the actual brand id in which the combine audit trail option is enabled. Once the signer completes the signing process, you can download the document containing both the signed document and the accompanying audit trail. --- # File: how-to-guides\configure-recipient-notifications-via-BoldSign-API.md # How to Configure Recipient Notifications When sending a document using the BoldSign API, you can control the notifications that recipients receive through the `recipientNotificationSettings` property for each signer. This article provides guidance on how to customize recipient notifications by updating the `recipientNotificationSettings` property in your API requests. If this property is not provided, the default notification settings configured in your business profile will apply. Following are the notifications available in recipientNotificationSettings. {% nestedtable %} - SignatureRequest - Indicates whether the recipient or CC should be notified when a document is sent. --- - Declined - Indicates whether the recipient or CC should be notified when a document is declined. --- - Revoked - Indicates whether the recipient or CC should be notified when a document is revoked. --- - Signed - Indicates whether the recipient or CC should be notified when a document is signed by other recipient. --- - Completed - Indicates whether the recipient or CC should be notified when the document is completed. --- - Expired - Indicates whether the recipient or CC should be notified when a document expires. --- - Reassigned - Indicates whether the recipient or CC should be notified when the document is reassigned. --- - Deleted - Indicates whether the recipient or CC should be notified when a document is deleted. --- - Reminders - Indicates whether the recipient should receive reminders for pending signature requests. --- - EditRecipient - Indicates whether the recipient should be notified when there is a change in the recipient. {% /nestedtable %} ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json' \ -d '{ "Signers": [ { "name": "Alex", "emailAddress": "alexgayle@boldsign.dev", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 125, "height": 25 }, "isRequired": true } ], "recipientNotificationSettings": { "signatureRequest": true, "declined": true, "revoked": true, "signed": true, "completed": true, "expired": true, "reassigned": true, "deleted": true, "reminders": true, "editRecipient": true } } ], "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Sampledocument", }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "agreement.pdf", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField, }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections); signer.RecipientNotificationSettings = new RecipientNotificationSettings() { SignatureRequest = true, Declined = true, Revoked = true, Signed= true, Completed= true, Expired = true, Reassigned = true, Deleted = true, Reminders = true, EditRecipient = true }; var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@boldsign.dev", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": True } ], "recipientNotificationSettings": { "signatureRequest": true, "declined": true, "revoked": true, "signed": true, "completed": true, "expired": true, "reassigned": true, "deleted": true, "reminders": true, "editRecipient": true } } payload = { 'Signers': [signer_data], 'Title': 'Agreement', 'Files': [ 'data:application/pdf;base64,JVBERi0xLjcKJcfs...' ], } headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{your API key}' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const fs = require('fs'); // Create the payload object const payload = { Signers: [ { name: 'David', emailAddress: 'david@boldsign.dev', formFields: [ { fieldType: 'Signature', pageNumber: 1, bounds: { x: 100, y: 100, width: 100, height: 50 }, isRequired: true } ], recipientNotificationSettings: { signatureRequest: true, declined: true, revoked: true, signed: true, completed: true, expired: true, reassigned: true, deleted: true, reminders: true, editRecipient: true } } ], Files: [ 'data:application/pdf;base64,JVBERi0xLjcKJcfs...' ], Title: 'Agreement' }; const response = await axios.post( 'https://api.boldsign.com/v1/document/send', payload, { headers: { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{your API key}' } } ); console.log(response.data); ``` PHP ```php false ]); $headers = [ 'X-API-KEY' => '{Your API Key}', 'Content-Type' => 'application/json', ]; $payload = [ "Signers" => [ [ "name" => "Sample document", "emailAddress" => "alexgayle@cubeflakes.com", "signerType" => "Signer", "formFields" => [ [ "id" => "string", "name" => "string", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 50, "y" => 50, "width" => 125, "height" => 25 ], "isRequired" => true ] ], "recipientNotificationSettings" => [ "signatureRequest" => true, "declined" => true, "revoked" => true, "signed" => true, "completed" => true, "expired" => true, "reassigned" => true, "deleted" => true, "reminders" => true, "editRecipient" => true ] ] ], "Files" => [ 'data:application/pdf;base64,JVBERi0xLjcKJcfs...' ], "Title" => 'Sample document' ]; $options = [ 'body' => json_encode($payload) ]; $request = new Request('POST', 'https://api.boldsign.com/v1/document/send', $headers); $res = $client->sendAsync($request, $options)->wait(); echo $res->getBody(); ?> ``` {% /codetab %} By customizing the `recipientNotificationSettings`, you can control the notification experience for each recipient according to your requirements. --- # File: how-to-guides\create-api-app.md # Create an API app with BoldSign BoldSign offers robust support for integrating its powerful e-signature functionalities into your applications. Follow these steps to create an API app with BoldSign: ## Prerequisites Before you begin, make sure you have the following: 1. A BoldSign account: Sign up at [BoldSign Signup](https://account.boldsign.com/signup). if you don't have an account already. 2. API credentials: Obtain your API credentials from the BoldSign application after logging in. ## Steps to create an API app ### Step 1: Create a new API app To create an OAuth app, refer to the article {% customlink href="/authentication/oauth-2-0" text="Create an OAuth app" /%} ### Step 2: API integration 1. In your application's codebase, incorporate the necessary libraries for making API requests. BoldSign provides SDKs and comprehensive documentation for various programming languages. 2. Use your API credentials to authenticate your app with the BoldSign API. ### Step 3: Making API requests 1. Explore the BoldSign API documentation to comprehend the available endpoints and request parameters. Refer to the {% customlink href="/api-overview/getting-started/" text="BoldSign API Documentation" /%} for detailed guidance. 2. Construct and send API requests from your application to BoldSign's servers. 3. Manage API responses in your application's code to implement the desired functionalities. ### Step 4: Testing and debugging 1. During development, leverage the sandbox or test environments provided by BoldSign. This ensures your application works seamlessly without affecting real data. 2. Utilize error handling mechanisms to manage unexpected responses or issues. ### Step 5: Deployment and monitoring 1. Once your app is tested and functioning correctly, you can deploy it to your production environment. 2. Monitor your app's usage and performance using the [BoldSign Developer Console](https://app.boldsign.com/api-management/developer-console/). 3. Regularly review API logs and usage metrics to identify and address any potential issues These integration steps enable you to create an API app using BoldSign, enhancing your applications with seamless e-signature capabilities. By following the outlined steps, you've harnessed the power of BoldSign's API to elevate your software projects to the next level. --- # File: how-to-guides\create-conditional-fields.md # Create conditional fields using API In BoldSign, the conditional feature is currently available for Checkbox, Radio Button, and Dropdown form fields. By applying conditional logic, you can control the visibility of certain fields, making them appear only when a specific field option is selected. For instance, when a checkbox is checked, a certain form field may be displayed, and when it is unchecked, a different form field may be displayed to the signer. ## Create a document with conditional fields To create a document with conditional fields using the BoldSign API, follow the code snippets provided below for each type of conditional field. ## Creating Conditional Fields Using Radio Buttons Radio buttons are a type of form field that allows users to make single selections from a list of options. In this example, we will create conditional fields based on radio button selections. {% codetab id="codetab1"%} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com"", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "RadioButton1", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": true } ], "isRequired": false }, { "id": "Radiobutton2", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 140, "y": 590, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Initial1", "isChecked": true } ], "isRequired": false } ], "language": 1 }' \ -F 'Files=@{Your file path}' \ -F 'Title={Your document title}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "signature1", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var initialField = new FormField( id: "initial1", isRequired: true, type: FieldType.Initial, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var radioButton1 = new RadioButtonField( id: "Radio1", isRequired: true, groupName: "Group1", pageNumber: 1, conditionalRules: new List() { new ConditionalRule() { FieldId = "signature1", IsChecked = true } }, bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20)); var radioButton2 = new RadioButtonField( id: "Radio2", isRequired: true, groupName: "Group1", pageNumber: 1, conditionalRules: new List() { new ConditionalRule() { FieldId = "initial1", IsChecked = true } }, bounds: new Rectangle(x: 100, y: 100, width: 20, height: 20)); var formFieldCollections = new List() { signatureField, initialField, radioButton1, radioButton2 }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", DisableExpiryAlert = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "RadioButton1", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": True } ], "isRequired": False }, { "id": "Radiobutton2", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 140, "y": 590, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Initial1", "isChecked": True } ], "isRequired": False } ], "language": 1 } payload = { 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files',('{your file name}',open('{Your file path}','rb'),'application/vnd.openxmlformats-officedocument.wordprocessingml.document')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const url = "https://api.boldsign.com/v1/document/send"; const signer_data = { "name": "David", "emailAddress": "david@cubefalkes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "RadioButton1", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": true } ], "isRequired": false }, { "id": "Radiobutton2", "name": "RadioButton", "fieldType": "RadioButton", "groupName": "ConditionalLogic", "pageNumber": 1, "bounds": { "x": 140, "y": 590, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Initial1", "isChecked": true } ], "isRequired": false }, // Add more form fields here if needed... ], "language": 1 }; const formData = new FormData(); formData.append('Message', ''); formData.append('Signers', JSON.stringify(signer_data)); formData.append('Title', '{title}'); formData.append('Files', fs.createReadStream('{Your file path}')); const headers = { ...formData.getHeaders(), 'X-API-KEY': '{Your API key}' }; axios.post(url, formData, { headers }) .then((response) => { console.log(response.data); }) .catch((error) => { console.error(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/document/send"; $signerData = [ "name" => "David", "emailAddress" => "{Signer email address}", "signerOrder" => 1, "signerType" => "Signer", "formFields" => [ [ "id" => "Signature1", "name" => "Signature1", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 140, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "Initial1", "name" => "Initial", "fieldType" => "Initial", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "RadioButton1", "name" => "RadioButton", "fieldType" => "RadioButton", "groupName" => "ConditionalLogic", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 390, "width" => 20, "height" => 20 ], "value" => "off", "conditionalRules" => [ [ "fieldId" => "Signature1", "isChecked" => true ] ], "isRequired" => false ], [ "id" => "Radiobutton2", "name" => "RadioButton", "fieldType" => "RadioButton", "groupName" => "ConditionalLogic", "pageNumber" => 1, "bounds" => [ "x" => 140, "y" => 590, "width" => 20, "height" => 20 ], "value" => "off", "conditionalRules" => [ [ "fieldId" => "Initial1", "isChecked" => true ] ], "isRequired" => false ] ], "language" => 1 ]; $payload = [ 'Message' => 'Please sign this', 'Signers' => json_encode($signerData), 'Title' => 'Please sign' ]; $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; try { $response = $client->post($url, [ 'multipart' => [ [ 'name' => 'Files', 'contents' => fopen('{Your file path}', 'r'), 'filename' => '{Your file name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ], [ 'name' => 'Message', 'contents' => '' ], [ 'name' => 'Signers', 'contents' => json_encode($signerData) ], [ 'name' => 'Title', 'contents' => 'Conditional' ] ], 'headers' => $headers ]); echo $response->getBody(); } catch (ClientException $e) { echo 'Request failed: ' . $e->getMessage(); echo "\nResponse: " . $e->getResponse()->getBody()->getContents(); } ``` {% /codetab %} In the above code examples, we first define the document structure, including the signer's information and the form fields. Conditional rules are specified using the `conditionalRules` property, where you can determine which fields should be visible based on the state of the radio buttons. For a visual reference, please take a look at the conditional logic applied in the images, as shown below. **When first radio button is selected - Signature field is shown** ![Step 1](/static/images/guides/conditional-field/step1.png) **When second radio button is selected - Initial field is shown** ![Step 1](/static/images/guides/conditional-field/step2.png) ## Creating Conditional Fields Using Checkboxes Checkboxes allow users to make multiple selections from a list of options. In this example, we will create conditional fields based on checkbox selections. {% codetab id="codetab2" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Checkbox1", "name": "Checkbox", "fieldType": "Checkbox", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": true }, { "fieldId": "Initial1", "isChecked": false } ], "isRequired": false } ], "language": 1 }' \ -F 'Files=@{Your file path}' \ -F 'Title={Your document title}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "signature1", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var initialField = new FormField( id: "initial1", isRequired: true, type: FieldType.Initial, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var checkbox1 = new FormField( id: "Checkbox1", type: FieldType.CheckBox, pageNumber: 1, conditionalRules: new List() { new ConditionalRule() { FieldId = "signature1", IsChecked = true }, new ConditionalRule() { FieldId = "initial1", IsChecked = false } }, bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20)); var formFieldCollections = new List() { signatureField, initialField, checkbox1 }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", DisableExpiryAlert = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "Checkbox1", "name": "Checkbox", "fieldType": "Checkbox", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": True }, { "fieldId": "Initial1", "isChecked": False } ] } ], "language": 1 } payload = { 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files',('{your file name}',open('{Your file path}','rb'),'application/vnd.openxmlformats-officedocument.wordprocessingml.document')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const url = "https://api.boldsign.com/v1/document/send"; const signer_data = { "name": "David", "emailAddress": "david@cubefalkes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Checkbox1", "name": "Checkbox", "fieldType": "Checkbox", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "value": "off", "conditionalRules": [ { "fieldId": "Signature1", "isChecked": true }, { "fieldId": "Initial1", "isChecked": false } ] } // Add more form fields here if needed... ], "language": 1 }; const formData = new FormData(); formData.append('Message', ''); formData.append('Signers', JSON.stringify(signer_data)); formData.append('Title', '{title}'); formData.append('Files', fs.createReadStream('{Your file path}')); const headers = { ...formData.getHeaders(), 'X-API-KEY': '{Your API key}' }; axios.post(url, formData, { headers }) .then((response) => { console.log(response.data); }) .catch((error) => { console.error(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/document/send"; $signerData = [ "name" => "David", "emailAddress" => "{Signer email address}", "signerOrder" => 1, "signerType" => "Signer", "formFields" => [ [ "id" => "Signature1", "name" => "Signature1", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 140, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "Initial1", "name" => "Initial", "fieldType" => "Initial", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "Checkbox1", "name" => "Checkbox", "fieldType" => "Checkbox", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 390, "width" => 20, "height" => 20 ], "value" => "off", "conditionalRules" => [ [ "fieldId" => "Signature1", "isChecked" => true ], [ "fieldId" => "Initial1", "isChecked" => false ] ] ] ], "language" => 1 ]; $payload = [ 'Message' => '', 'Signers' => json_encode($signerData), 'Title' => '{title}' ]; $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; try { $response = $client->post($url, [ 'multipart' => [ [ 'name' => 'Files', 'contents' => fopen('{Your file path}', 'r'), 'filename' => '{your file name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ], [ 'name' => 'Message', 'contents' => '' ], [ 'name' => 'Signers', 'contents' => json_encode($signerData) ], [ 'name' => 'Title', 'contents' => 'Checkbox' ] ], 'headers' => $headers ]); echo $response->getBody(); } catch (ClientException $e) { echo 'Request failed: ' . $e->getMessage(); echo "\nResponse: " . $e->getResponse()->getBody()->getContents(); } ``` {% /codetab %} Similar to the radio button example, we define the document structure and use the `conditionalRules` property to specify which fields should appear based on checkbox selections. For a visual reference, please take a look at the conditional logic applied in the images, as shown below. **When checkbox is checked - Signature field is shown** ![Step 1](/static/images/guides/conditional-field/step3.png) **When checkbox is unchecked - Initial field is shown** ![Step 1](/static/images/guides/conditional-field/step4.png) ## Creating Conditional Fields Using Dropdowns Dropdowns provide users with a list of options, allowing them to select a single item. In this example, we will create conditional fields based on dropdown selections. {% codetab id="codetab3" %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Dropdown1", "name": "Dropdown", "fieldType": "Dropdown", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "dropdownOptions": [ "1", "2" ], "value": "1", "conditionalRules": [ { "fieldId": "Signature1", "value": "1" }, { "fieldId": "Initial1", "value": "2" } ], "isRequired": false } ], "language": 1 }' \ -F 'Files=@{Your file path}' \ -F 'Title={Your document title}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "signature1", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var initialField = new FormField( id: "initial1", isRequired: true, type: FieldType.Initial, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var dropdownField = new DropdownField( id: "Dropdown11", pageNumber: 1, dropdownOptions: new List() { "1", "2" }, conditionalRules: new List() { new ConditionalRule() { FieldId = "signature1", Value = "1" }, new ConditionalRule() { FieldId = "initial1", Value = "2" } }, bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20)); var formFieldCollections = new List() { signatureField, initialField, dropdownField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "{Your title}", DisableExpiryAlert = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": False }, { "id": "Dropdown1", "name": "Dropdown", "fieldType": "Dropdown", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 60, "height": 20 }, "dropdownOptions": [ "1", "2" ], "conditionalRules": [ { "fieldId": "Signature1", "value": "1" }, { "fieldId": "Initial1", "value": "2" } ] } ], "language": 1 } payload = { 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files',('{your file name}',open('{Your file path}','rb'),'application/vnd.openxmlformats-officedocument.wordprocessingml.document')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const url = "https://api.boldsign.com/v1/document/send"; const signer_data = { "name": "David", "emailAddress": "david@cubefalkes.com", "signerOrder": 0, "signerType": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 140, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Initial1", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 340, "y": 190, "width": 82, "height": 32 }, "isRequired": false }, { "id": "Dropdown1", "name": "Dropdown", "fieldType": "Dropdown", "pageNumber": 1, "bounds": { "x": 340, "y": 390, "width": 20, "height": 20 }, "dropdownOptions": [ "1", "2" ], "conditionalRules": [ { "fieldId": "Signature1", "value": "1" }, { "fieldId": "Initial1", "value": "2" } ] } // Add more form fields here if needed... ], "language": 1 }; const formData = new FormData(); formData.append('Message', ''); formData.append('Signers', JSON.stringify(signer_data)); formData.append('Title', '{title}'); formData.append('Files', fs.createReadStream('{Your file path}')); const headers = { ...formData.getHeaders(), 'X-API-KEY': '{Your API key}' }; axios.post(url, formData, { headers }) .then((response) => { console.log(response.data); }) .catch((error) => { console.error(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/document/send"; $signerData = [ "name" => "David", "emailAddress" => "{Signer email address}", "signerOrder" => 1, "signerType" => "Signer", "formFields" => [ [ "id" => "Signature1", "name" => "Signature1", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 140, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "Initial1", "name" => "Initial", "fieldType" => "Initial", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 190, "width" => 82, "height" => 32 ], "isRequired" => false ], [ "id" => "Dropdown1", "name" => "Dropdown", "fieldType" => "Dropdown", "pageNumber" => 1, "bounds" => [ "x" => 340, "y" => 390, "width" => 60, "height" => 20 ], "dropdownOptions" => [ "1", "2" ], "conditionalRules" => [ [ "fieldId" => "Signature1", "value" => "1" ], [ "fieldId" => "Initial1", "value" => "2" ] ] ] ], "language" => 1 ]; $payload = [ [ 'name' => 'Message', 'contents' => '' ], [ 'name' => 'Signers', 'contents' => json_encode($signerData) ], [ 'name' => 'Title', 'contents' => '{title}' ] ]; $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; try { $response = $client->post($url, [ 'multipart' => array_merge($payload, [ [ 'name' => 'Files', 'contents' => fopen('{Your file path}', 'r'), 'filename' => '{Your file name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ] ]), 'headers' => $headers ]); echo $response->getBody(); } catch (ClientException $e) { echo 'Request failed: ' . $e->getMessage(); echo "\nResponse: " . $e->getResponse()->getBody()->getContents(); } ``` {% /codetab %} In the dropdown example, we include a list of options in the `dropdownOptions` property and use the `conditionalRules` property to specify which fields should be visible based on the selected dropdown value. For a visual reference, please take a look at the conditional logic applied in the images, as shown below. **When first value is selected in the dropdown - Signature field is shown** ![Step 1](/static/images/guides/conditional-field/step5.png) **When second value is selected in the dropdown - Initial field is shown** ![Step 1](/static/images/guides/conditional-field/step6.png) By following the provided code snippets and examples, you can create documents with conditional fields using the BoldSign API. Conditional fields enhance the user experience by dynamically displaying relevant form fields based on user interactions. Experiment with different scenarios and conditions to tailor your documents to your specific needs. --- # File: how-to-guides\create-template.md # How to Create Templates with BoldSign API If you frequently need to send the same contracts to different people for signing, templates can help you save time. Once you create a template, you can send contracts in less than a minute using the template. Below are examples of how to create a template in various programming languages: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/create' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DocumentMessage=document message for signers' \ -F 'Files=@{your file};type=application/pdf' \ -F 'Title=title of the template' \ -F 'AllowMessageEditing=true' \ -F 'Description=testingDescription' \ -F 'DocumentTitle=title of the document' \ -F 'Roles={ "name": "Manager", "index": 1, "defaultSignerName": "Alex Gayle", "defaultSignerEmail": "alexgayle@cubeflakes.com", "signerOrder": 1, "signerType": "Signer", "formFields": [ { "id": "sign_id", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 100, "height": 60 }, "isRequired": true } ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "API-KEY"); var templateClient = new TemplateClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign_id", type: Type.Signature, pageNumber: 1, bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)); var formFieldsCollections = new List { signatureField, }; var templateRole = new TemplateRole( roleIndex: 1, name: "Manager", defaultSignerName: "Alex Gayle", defaultSignerEmail: "alexgayle@cubeflakes.com", signerOrder: 1, signerType: SignerType.Signer, formFields: formFieldsCollections, locale: Locales.EN); var roles = new List { templateRole, }; var templateRequest = new CreateTemplateRequest() { Title = "title of the template", DocumentMessage = "document message for signers", Files = filesToUpload, Description = "testingDescription", DocumentTitle = "title of the document", Roles = roles }; var templateCreated = templateClient.CreateTemplate(templateRequest); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/create" payload = { "AllowNewRoles": "true", "DocumentMessage": "document message for signers", "Title": "title of the template", "AllowMessageEditing": "true", "Description": "testingDescription", "DocumentTitle": "title of the document", "Roles": json.dumps( { "name": "Manager", "index": 1, "defaultSignerName": "Alex Gayle", "defaultSignerEmail": "alexgayle@boldsign.dev", "signerOrder": 1, "signerType": "Signer", "locale": "EN", "imposeAuthentication": "None", "deliveryMode": "Email", "formFields": [ { "id": "sign_id", "name": "sign", "fieldType": "Signature", "pageNumber": 1, "bounds": {"x": 50, "y": 100, "width": 100, "height": 60}, "isRequired": True } ], "allowRoleEdit": True, "allowRoleDelete": True, } ), } files = [ ("Files", ("file", open("{your file}", "rb"), "application/msword")) ] headers = { "accept": "application/json", "X-API-KEY": "{your api ky}", } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('AllowNewRoles', 'true'); form.append('DocumentMessage', 'document message for signers'); formData.append('Files', fs.createReadStream(filePath), { filename: 'yourfilename.pdf', contentType: 'application/pdf' }); form.append('Title', 'title of the template'); form.append('AllowMessageEditing', 'true'); form.append('Description', 'testingDescription'); form.append('DocumentTitle', 'title of the document'); form.append('Roles', '{\n "name": "Manager",\n "index": 1,\n "defaultSignerName": "Alex Gayle",\n "defaultSignerEmail": "alexgayle@cubeflakes.com",\n "signerOrder": 1,\n "signerType": "Signer",\n "locale": "EN",\n "imposeAuthentication": "None",\n "deliveryMode": "Email",\n "formFields": [\n {\n "id": "sign_id",\n "name": "sign",\n "fieldType": "Signature",\n "pageNumber": 1,\n "bounds": {\n "x": 50,\n "y": 100,\n "width": 100,\n "height": 60\n },\n "isRequired": true\n }\n ],\n "allowRoleEdit": true,\n "allowRoleDelete": true\n}'); const response = await axios.post( ' https://api.boldsign.com/v1/template/create', form, { headers: { ...form.getHeaders(), 'accept': 'application/json', 'X-API-KEY': '{API-KEY}', 'Content-Type': 'multipart/form-data' } } ); ``` PHP ```php false, ]); $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{your API key}' ]; $options = [ 'multipart' => [ [ 'name' => 'DocumentMessage', 'contents' => 'document message for signers' ], [ 'name' => 'Files', 'contents' => Utils::tryFopen('/path/to/file', 'r'), 'filename' => '/path/to/file', 'headers' => [ 'Content-Type' => '' ] ], [ 'name' => 'Title', 'contents' => 'title of the template' ], [ 'name' => 'AllowMessageEditing', 'contents' => 'true' ], [ 'name' => 'Description', 'contents' => 'testingDescription' ], [ 'name' => 'DocumentTitle', 'contents' => 'title of the document' ], [ 'name' => 'Roles', 'contents' => '{ "name": "Manager", "index": 1, "defaultSignerName": "Alex Gayle", "defaultSignerEmail": "alexgayle@cubeflakes.com", "signerOrder": 1, "signerType": "Signer", "formFields": [ { "id": "sign_id", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 100, "height": 60 }, "isRequired": true } ] }' ] ]]; $request = new Request('POST', 'https://api.boldsign.com/v1/template/create', $headers); $res = $client->sendAsync($request, $options)->wait(); echo $res->getBody(); ``` {% /codetab %} In the provided code example, provide values for `Roleindex`, `Rolename`. Replace the values for `API KEY` with the correct value, `File`with your correct file path. When the above codes are executed, a template is created successfully with the values provided and `templateId` is returned. --- # File: how-to-guides\creating-an-embedded-signing-with-restricted-navigation-and-preparePage-only.md # How to restrict users from navigating back to modify documents and signer details in embedded requests? BoldSign provides the capability to customize toolbars for embedded requests, enabling you to restrict users from navigating back to modify document or signer details. This ensures that users can only configure the document and proceed with sending it. By disabling the back navigation and directing users to the configuration page, you can enforce a structured workflow where users finalize document settings before sending. ## Customize UI for embed document request In your application, create a user interface (UI) that allows users to input necessary details for an embedded document request. The UI should include fields for: - `Title` - `Message` ## Configure the API Request To restrict users from navigating backward and allow only document sending, set the following parameters: 1.`ShowNavigationButton`: `false` → Disables the back button, preventing users from returning to the previous page. 2.`SendViewOption`: `PreparePage` → Ensures users land directly on the document configuration page. ### Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/createEmbeddedRequestUrl' \ -H 'X-API-KEY: {your API key}' \ -F 'Title=Sent from API Curl' \ -F 'ShowToolbar=true' \ -F 'ShowNavigationButtons=false' \ -F 'ShowPreviewButton=true' \ -F 'ShowSendButton=true' \ -F 'ShowSaveButton=true' \ -F 'SendViewOption=PreparePage' \ -F 'ShowTooltip=false' \ -F 'Locale=EN' \ -F 'Message=This is document message sent from API Curl' \ -F 'EnableSigningOrder=false' \ -F 'Signers[0][Name]=Signer Name 1' \ -F 'Signers[0][EmailAddress]=alexgayle@cubeflakes.com' \ -F 'Files=@{Your file Path};type=application/pdf' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentRequest = new EmbeddedDocumentRequest { Title = "Sent from API SDK", Message = "This is document message sent from API SDK", Signers = new List { new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", locale: Locales.EN) }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", // directly provide file path FilePath = "{Your file path}", }, }, // customize page options SendViewOption = PageViewOption.PreparePage, Locale = Locales.EN, ShowToolbar = true, ShowNavigationButtons = false, ShowSaveButton = true, ShowPreviewButton = true, ShowSendButton = true, ShowTooltip = false, }; var documentCreated = await documentClient.CreateEmbeddedRequestUrlAsync(documentRequest); // url to send the document from your web application var documentSendUrl = documentCreated.SendUrl; ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: document_api = boldsign.DocumentApi(api_client) form_fields = [ boldsign.FormField( fieldType = "Signature", pageNumber = 1, bounds = boldsign.Rectangle(x = 50, y = 50, width = 200, height = 30) ) ] document_signer = boldsign.DocumentSigner( name = "David", emailAddress = "david@cubeflakes.com", signerType = "Signer", formFields = form_fields, ) embedded_document_request = boldsign.EmbeddedDocumentRequest( title = "Sent from API Python SDK", showToolbar = True, sendViewOption = "PreparePage", showNavigationButtons = False, signers = [document_signer], files = ["YOUR_FILE_PATH"], ) embedded_send_created = document_api.create_embedded_request_url_document(embedded_document_request) ``` PHP ```php setApiKey('YOUR_API_KEY'); $document_api = new DocumentApi($config); $form_field = new FormField(); $form_field->setFieldType('Signature'); $form_field->setPageNumber(1); $bounds = new Rectangle([50, 100, 100, 60]); $form_field->setBounds($bounds); $document_signer = new DocumentSigner(); $document_signer->setName('David'); $document_signer->setEmailAddress('david@cubeflakes.com'); $document_signer->setSignerType('Signer'); $document_signer->setFormFields([$form_field]); $embedded_document_request = new EmbeddedDocumentRequest(); $embedded_document_request->setTitle('Sent from API Php SDK'); $embedded_document_request->setSendViewOption('PreparePage'); $embedded_document_request->setShowNavigationButtons(true); $embedded_document_request->setShowToolbar(true); $embedded_document_request->setSigners([$document_signer]); $embedded_document_request->setFiles(['YOUR_FILE_PATH']); $embedded_send_created = $document_api->createEmbeddedRequestUrlDocument($embedded_document_request); ``` Java ```java ApiClient client = Configuration.getDefaultApiClient(); client.setApiKey("YOUR_API_KEY"); DocumentApi documentApi = new DocumentApi(client); Rectangle rectangle = new Rectangle(); rectangle.setX(50f); rectangle.setY(50f); rectangle.setWidth(200f); rectangle.setHeight(30f); FormField formField = new FormField(); formField.setFieldType(FormField.FieldTypeEnum.SIGNATURE); formField.setPageNumber(1); formField.setBounds(rectangle); DocumentSigner documentSigner = new DocumentSigner(); documentSigner.setName("David"); documentSigner.setEmailAddress("david@cubeflakes.com"); documentSigner.setFormFields(Arrays.asList(formField)); EmbeddedDocumentRequest embeddedDocumentRequest = new EmbeddedDocumentRequest(); embeddedDocumentRequest.setTitle("Sent from API Java SDK"); embeddedDocumentRequest.setShowToolbar(true); embeddedDocumentRequest.setShowNavigationButtons(false); embeddedDocumentRequest.setShowPreviewButton(true); embeddedDocumentRequest.setShowSendButton(true); embeddedDocumentRequest.setShowSaveButton(true); embeddedDocumentRequest.setSendViewOption(EmbeddedDocumentRequest.SendViewOptionEnum.PREPARE_PAGE); embeddedDocumentRequest.setLocale(EmbeddedDocumentRequest.LocaleEnum.EN); embeddedDocumentRequest.setShowTooltip(false); embeddedDocumentRequest.setRedirectUrl(URI.create("https://boldsign.dev/sign/redirect")); embeddedDocumentRequest.setSigners(Arrays.asList(documentSigner)); File file = new File("Your_File_Path"); embeddedDocumentRequest.setFiles(Arrays.asList(file)); EmbeddedSendCreated embeddedSendCreated = documentApi.createEmbeddedRequestUrlDocument(embeddedDocumentRequest); ``` NodeJS ```js import { DocumentApi, DocumentSigner, EmbeddedDocumentRequest, FormField, Rectangle } from "boldsign"; import * as fs from 'fs'; import * as path from 'path'; const documentApi = new DocumentApi(); documentApi.setApiKey("YOUR_API_KEY"); const bounds = new Rectangle(); bounds.x = 100; bounds.y = 50; bounds.width = 100; bounds.height = 100; const formField = new FormField(); formField.fieldType = FormField.FieldTypeEnum.Signature; formField.pageNumber = 1; formField.bounds = bounds; const documentSigner = new DocumentSigner(); documentSigner.name = "David"; documentSigner.emailAddress = "david@cubeflakes.com"; documentSigner.signerOrder = 1; documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer; documentSigner.privateMessage = "This is private message for signer"; documentSigner.formFields = [formField]; const embeddedDocumentRequest = new EmbeddedDocumentRequest(); embeddedDocumentRequest.title = "Sent from API Node SDK"; embeddedDocumentRequest.showToolbar = true; embeddedDocumentRequest.showNavigationButtons = false; embeddedDocumentRequest.showPreviewButton = true; embeddedDocumentRequest.showSendButton = true; embeddedDocumentRequest.showSaveButton = true; embeddedDocumentRequest.sendViewOption = EmbeddedDocumentRequest.SendViewOptionEnum.PreparePage; embeddedDocumentRequest.locale = EmbeddedDocumentRequest.LocaleEnum.En; embeddedDocumentRequest.showTooltip = false; embeddedDocumentRequest.redirectUrl = "https://boldsign.dev/"; embeddedDocumentRequest.message = "This is document message sent from API Node SDK"; embeddedDocumentRequest.enableSigningOrder = false; embeddedDocumentRequest.signers = [documentSigner]; const filePath = path.resolve("YOUR_FILE_PATH"); const files = fs.createReadStream(filePath); embeddedDocumentRequest.files = [files]; const embeddedSendCreated = documentApi.createEmbeddedRequestUrlDocument(embeddedDocumentRequest); ``` {% /codetab %} --- # File: how-to-guides\customize-signed-document-naming.md # How to Customize Signed Document Naming In BoldSign, you can customize the naming format for signed documents to suit your needs. By default, a standard naming format is applied, but this can be tailored to include specific details by specifying them using the `downloadFileName` property. This feature ensures consistent naming conventions and helps keep your signed documents organized. **Notes:** Please refer to below rules for naming cutom files You can use up to three syntax patterns. Use the predefined patterns or custom text. If custom text contains spaces, they will be replaced with underscores (_). **Allowed characters**: A-Z, a-z, 0-9, hyphens (-), and underscores (_). **Max length**: File names can be up to 200 characters long. Longer names will be truncated. ## Send document with download file name option When sending out document for signature you can specify the file name format for signed documents and audit trails, which will apply to emails, downloads, and cloud storage. By default, the file name includes the document title and status. For customized naming, you can use placeholders like {title}, {status}, or {date} to create a format that fits your needs. Additionally, you can name file using more tha one file format. Refer to below list of available file name pattern options: {title} : The title of the document. {documentId} : The unique identifier of the document. {status} : The status of the document. {signername} : The name of the first signer in the document. {signername_last} : The name of the last signer in the document. {sendername} : The sender of the document. {signername_order#1} : When multiple signers are added to a document, specify which signer's name to use by indicating their placement in the signing order. {completeddate} : The document's completion date. Below are examples of how to do this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {YOUR API KEY}' \ -H 'Content-Type: multipart/form-data' \ -F 'message=sign' \ -F 'signers={ "name": "star", "emailAddress": "alexgayle@cubeflakes.com", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "allowFieldConfiguration": true, "formFields": [ { "id": "sign", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 130, "y": 130, "width": 81, "height": 31 }, "isRequired": true } ], "locale": "EN" }' \ -F 'downloadFileName={title}_{signername}' \ -F 'Files=@{your file}' \ -F 'title=Testing file name' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", // Replace with actual file path }; var filesToUpload = new List { documentFilePath }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 130, y: 130, width: 81, height: 31)); var formFieldCollections = new List { signatureField }; var signer = new DocumentSigner( signerName: "star", signerType: SignerType.Signer, signerEmail: "alexgayle@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); signer.DeliveryMode = DeliveryMode.Email; var documentSigners = new List { signer }; var sendForSign = new SendForSign { Message = "please sign this", Title = "Testing file name", Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "star", "emailAddress": "alexgayle@cubeflakes.com", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "allowFieldConfiguration": True, "formFields": [ { "id": "sign", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 130, "y": 130, "width": 81, "height": 31 }, "isRequired": True } ], "locale": "EN" } payload = { 'message': 'sign', 'signers': json.dumps(signer_data), 'downloadFileName': '{title}_{signername}', 'title': 'Testing file name' } files = [ ('Files', ( 'your_file_name.pdf', open('{your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{YOUR API KEY}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.status_code) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const url = "https://api.boldsign.com/v1/document/send"; const formData = new FormData(); formData.append('message', 'sign'); formData.append('signers', JSON.stringify({ "name": "star", "emailAddress": "alexgayle@cubeflakes.com", "privateMessage": "sign", "authenticationType": "None", "deliveryMode": "Email", "signerType": "Signer", "allowFieldConfiguration": true, "formFields": [ { "id": "sign", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 130, "y": 130, "width": 81, "height": 31 }, "isRequired": true } ], "locale": "EN" })); formData.append('downloadFileName', '{title}_{signername}'); formData.append('title', 'Testing file name'); formData.append('Files', fs.createReadStream('{your file path}')); const headers = { 'accept': 'application/json', 'X-API-KEY': '{YOUR API KEY}', ...formData.getHeaders() }; axios.post(url, formData, { headers }) .then(response => { console.log(response.status); console.log(response.data); }) .catch(error => { console.error(error.response ? error.response.data : error.message); }); ``` {% /codetab %} In the provided code example, provide values for `downloadFileName` using one of the prefered supported format from list. Replace the values for `API KEY` with the correct value, `File`with your correct file path. When the above codes are executed and the document is completed, the document will be updated and saved with the selected file name format. --- # File: how-to-guides\customize-the-embedded-send-toolbars.md # Customize the embedded send toolbars This comprehensive guide demonstrates how to customize the embedded send toolbars in your application. The embedded send toolbars provide users with options to control appearance and functionality of the document editor and templates in your application. You can customize various toolbar options to tailor the user experience according to your needs. Follow these steps below to seamlessly customize the embedded send toolbars in your application ## Embedded documents To create an embedded document in your application, refer to the article: {% customlink href="/how-to-guides/embed-the-document-creation-into-your-application/" text="Embedded Document Creation" /%}. In BoldSign, the following options are available for customizing embedded documents: 1. `ShowToolbar` - Data Type: BOOLEAN - Description: Controls the visibility of the toolbar at the top of the document editor. - Default: false 2. `ShowSaveButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Save and Close button from the More Action drop-down menu. Set to `false` if you don't want users to save the document as a draft instead of sending it for signature. - Default: true 3. `ShowSendButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Send button at the top right corner of the page. Set to `false` if you want users to save the document only as drafts instead of sending it for signature. - Default: true 4. `ShowPreviewButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Preview button from the More Action drop-down menu. Set to `false` if you don't want users to preview the document before sending it for signature. - Default: true 5. `ShowNavigationButtons` - Data Type: BOOLEAN - Description: Controls the visibility of the Back button. Set to `false` if you don't want users to navigate away from the current page. - Default: true 6. `SendViewOption` - Data Type: STRING - Description: Configures the initial view page to be loaded from the generated URL. The `FillingPage` is used to customize signers, enforce authentication etc. The `PreparePage` is used to configure form fields for the signers. Either `PreparePage` or `FillingPage`. - Default: PreparePage 7. `ShowTooltip` - Data Type: BOOLEAN - Description: Controls the visibility of the Tooltip near the assignee field on the prepare page. Set it to `true` if you want to show the tooltip content to the user. - Default: false ## Embedded templates To create an embedded template in your application, refer to the article: {% customlink href="/how-to-guides/embed-the-template-creation-into-your-application/" text="Embedded Template Creation" /%} In BoldSign, you have the following options available for customizing embedded templates: 1. `ShowToolbar` - Data Type: BOOLEAN - Description: Controls the visibility of the toolbar at the top of the document editor in the template editor. - Default: false 2. `ShowSaveButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Save and Close button from the More Action drop-down menu in the template editor. Set to `false` if you want users to finalize the template instead of saving it as a draft. - Default: true 3. `ShowSendButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Create template button at the top right corner of the page in the template editor. Set to `false` if you want users to save the template only as drafts instead of finalizing it. - Default: true 4. `ShowPreviewButton` - Data Type: BOOLEAN - Description: Controls the visibility of the Preview button from the More Action drop-down menu in the template editor. Set to `false` if you don't want users to preview the template before finalizing it. - Default: true 5. `ShowNavigationButtons` - Data Type: BOOLEAN - Description: Controls the visibility of the Back button in the template editor. Set to `false` if you don't want users to navigate away from the current page. - Default: true 6. `ViewOption` - Data Type: STRING - Description: Configures the initial view page to be loaded from the generated URL. The `FillingPage` is used to customize roles, enforce authentication etc. The `PreparePage` is used to configure form fields for the roles. Either `PreparePage` or `FillingPage`. - Default: PreparePage 7. `ShowTooltip` - Data Type: BOOLEAN - Description: Controls the visibility of the Tooltip near the assignee field on the prepare page, set it to `true` if you want to show the tooltip content to the user. - Default: false To implement these customizations, modify the respective parameters according to your requirements. Update the BOOLEAN values to either true or false based on whether you want to show or hide the corresponding toolbar elements. These settings will help you tailor the user experience in the embedded document and template editors. --- # File: how-to-guides\delete-template.md # How to Delete a Template Using BoldSign API BoldSign supports the functionality to delete previously created templates using API. In case your organization has so many templates, there is possibility that there are some that are not much useful anymore, you can review and delete the templates that are not used any more with the help of API. In order to delete a template, you need to retrieve the Template ID of the template you want to delete. You can list your templates using the API to find this ID or get it from the [ web app](https://support.boldsign.com/kb/article/13689/get-the-template-id). Refer to this on how to list templates via API: [List Templates Via API](https://developers.boldsign.com/template/list-templates/?region=us). Here are some example codes demonstaring on how to delete a template via API: ## Code snippet {% codetab %} cURL ```shell curl -X 'DELETE' \ 'https://api.boldsign.com/v1/template/delete?templateId={your templateId}' \ -H 'accept: */*' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your API-KEY"); var templateClient = new TemplateClient(apiClient); var documentStream = templateClient.DeleteTemplate("{your templateId}"); ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/delete?templateId={your templateId}" payload={} headers = { 'accept': '*/*', 'X-API-KEY': '{API-KEY}' } response = requests.request("DELETE", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function deleteTemplate() { try { const response = await axios.delete('https://api.boldsign.com/v1/template/delete', { params: { 'templateId': '{your templateId}' }, headers: { 'accept': '*/*', 'X-API-KEY': '{your api key}' } }); console.log(response.data); } catch (error) { console.error('Error deleting template:', error); } } deleteTemplate(); ``` PHP ```php false, ]); $headers = [ 'accept' => '*/*', 'X-API-KEY' => '{your API key}' ]; $request = new Request('DELETE', 'https://api.boldsign.com/v1/template/delete?templateId={your templateId}', $headers); $res = $client->sendAsync($request)->wait(); echo $res->getBody(); ``` {% /codetab %} In the above examples, make sure to replace `templateId` with the ID of the template that you want to delete. Once the codes are executed, the provided template will be permanently deleted from your account. --- # File: how-to-guides\detect-fillable-fields-in-the-document-and-replace-it-with-BoldSign-form-fields-while-sending-the-document-via-API.md # Replace Fillable Fields with BoldSign Fields BoldSign supports automatic detection of form fields within fillable documents. By setting the `AutoDetectFields` property to `true` during document creation, BoldSign can identify and replace fillable fields with corresponding BoldSign form fields. The auto-detection feature supports text boxes, checkboxes, radio buttons, dropdowns, and signature fields. Here are some code examples that illustrate how to detect fillable fields in a document and automatically replace them with BoldSign form fields when sending the document through the API. ## Code snippet using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'AutoDetectFields=true' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", AutoDetectFields = true, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document", 'AutoDetectFields': True } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); data.append('AutoDetectFields', 'true'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false, // Disable SSL verification ]); $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; $options = [ 'multipart' => [ [ 'name' => 'Signers', 'contents' => '{ "name": "David", "emailAddress": "david@boldsign.dev", "signerType": "Signer", "locale": "EN" }' ], [ 'name' => 'Title', 'contents' => 'Sample' ], [ 'name' => 'AutoDetectFields', 'contents' => 'true' ], [ 'name' => 'Files', 'contents' => Utils::tryFopen('{Your File Path}', 'r'), 'filename' => '{Your File name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ] ]]; $request = new Request('POST', 'https://api.boldsign.com/v1/document/send', $headers); $res = $client->sendAsync($request, $options)->wait(); echo $res->getBody(); ?> ``` {% /codetab %} In the examples provided above, please ensure that the `AutoDetectFields` option is set to `true`. This will automatically detect fillable fields within the document and replace them with BoldSign form fields when the document is sent to the signer. --- # File: how-to-guides\difference-between-api-and-web-app.md # What’s the Difference Between an API and a Web App? The BoldSign web app is a user-friendly interface that allows you to send signature requests, track their progress, and manage your eSignature workflow. It is designed to be easy to use for both senders and signers. The below video provides an overview of BoldSign web application, including how to get started with BoldSign and send first document out for signature. {% embedvideo src="https://www.youtube.com/embed/OwfdArlGd2A" /%} The BoldSign API is a set of programming API that allow developers to embed eSignature capabilities into their own applications. For example, a developer could use the BoldSign API to create a custom eSignature workflow for their App. Here are some scenarios where you might want to use the BoldSign API: 1. You need to embed eSigning functionality into your own application. 2. You need to automate your eSignature workflow. 3. You need to customize the signing workflow to meet your specific needs. If you are not sure which option is right for you, you can contact BoldSign [support](https://support.boldsign.com/agent/tickets/create) for assistance. The below video provides an overview of BoldSign APIs, including how to get started and its key features {% embedvideo src="https://www.youtube.com/embed/H3T-rj3lSbE" /%} --- # File: how-to-guides\disable-email-notifications.md # How to Disable All Email Notifications If you want to manage the signature process within your application and prevent email notifications from being sent to signers, BoldSign allows you to disable email notifications when sending documents using the API. This ensures that recipients will not receive any email communication associated with the signing process. Follow these steps to disable email notifications while sending a document: ## Disable email notifications for document sending First, you need to send a document to the signer by disabling the email notifications. Here's how you can achieve this using the API. Here are example codes that can be used to achieve this: ## Code snippet to disable email notifications {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DisableEmails= true' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", DisableEmails = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'DisableEmails': True, 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('DisableEmails', 'true'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/document/send"; $signerData = [ "name" => "Hanky", "emailAddress" => "{Signer email address}", "signerType" => "Signer", "formFields" => [ [ "id" => "string", "name" => "string", "fieldType" => "Signature", "pageNumber" => 1, "bounds" => [ "x" => 50, "y" => 50, "width" => 1, "height" => 1 ], "isRequired" => true ] ], "locale" => "EN" ]; $payload = [ 'DisableEmails' => true, 'Message' => '', 'Signers' => json_encode($signerData), 'Title' => '{title}' ]; $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; try { $response = $client->post($url, [ 'multipart' => array_merge([ [ 'name' => 'DisableEmails', 'contents' => $payload['DisableEmails'] ? 'true' : 'false' ], [ 'name' => 'Message', 'contents' => $payload['Message'] ], [ 'name' => 'Signers', 'contents' => $payload['Signers'] ], [ 'name' => 'Title', 'contents' => $payload['Title'] ], ], [ [ 'name' => 'Files', 'contents' => fopen('{Your file path}', 'r'), 'filename' => '{Your file name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ] ]), 'headers' => $headers ]); echo $response->getBody(); } catch (ClientException $e) { echo 'Request failed: ' . $e->getMessage(); echo "\nResponse: " . $e->getResponse()->getBody()->getContents(); } ``` {% /codetab %} In the example above, provide a document in the `Files` field and fill in the required fields such as `Title` and `Signers`. Configure the remaining fields according to your requirements. To disable email notifications, set the `DisableEmails` field as true. With email notifications disabled, you can proceed to obtain the signer's signature within your application using embedded signing. You can embed the signing request in your application to facilitate the signature process without sending email notifications. For detailed steps on how to integrate embedded signing into your application, refer to this article {% customlink href="/how-to-guides/integrate-embedded-signing-in-your-website-or-application/" text="Integrate Embeeded Signing in your application" /%} --- # File: how-to-guides\disable-expiry-notifications.md # Disable Expiry Notifications for Signers When sending documents for signatures via BoldSign, there might be scenarios where you don't want to alert the signers about the document's expiry date. BoldSign provides a feature that allows you to disable the expiry notification for signers, ensuring a smoother document signing experience. ## Disabling expiry notifications To disable expiry notifications, you can leverage the `DisableExpiryAlert` property in the document metadata. By setting this property to `true`, you effectively prevent the expiry alert from being sent to the signer's email. Here are code examples demonstrating how to achieve this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DisableExpiryAlert= true' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", DisableExpiryAlert = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'DisableExpiryAlert': True, 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('DisableExpiryAlert', 'true'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} By setting the `DisableExpiryAlert` property to `true` in your API call, you ensure that signers won't receive expiry notifications via email. Make sure to provide the necessary fields such as `Files,` `Title,` and `Signers` in your API call. This approach allows you to maintain control over the document workflow and disable expiry notifications for a smoother signing process. --- # File: how-to-guides\download-attachment.md # How to Download Document Attachments Easily In BoldSign, the signer can attach a file while signing a document. For that the sender must have added a attachment field in the document, before sending it. This article is about downloading the attached file by using the `downloadAttachment` API. Follow these steps to successfully download the attachment that the signer has attached: ## Get the attachment ID from the document properties To download the attachment, you'll need the `attachmentId` of the attachment present in the document that was sent for signature and the `documentId` of the document. You will receive the `documentId` after sending a document via API. You can obtain the `attachmentId` from the document properties, which can be retrieved using the `properties` API. You can refer to the following link to get the document properties: [Get Document Properties](/documents/document-details-and-status/). Look for the `id` value inside the `formField` object where the `fieldType` is specified as `Attachment`. This `id` corresponds to the `attachmentId` you need. ### Example response from properties API containing attachment form field ```json { "formFields": [ { "id": "attachment_ppYla", "type": "attachment", "value": "Consent form - Attached", "font": "Helvetica", "isRequired": true, "isReadOnly": false, "lineHeight": 14, "fontSize": 13, "fontColor": "#000000", "isUnderline": false, "isItalic": false, "isBold": false, "groupName": "", "placeholder": "", "validationtype": "None", "validationCustomRegex": "", "validationCustomRegexMessage": "", "dateFormat": "", "imageInfo": null, "attachmentInfo": { "title": "Consent form", "description": "", "allowedFileTypes": "PDF, DOCUMENT, IMAGE", "acceptedFileTypes": [ "PDF", "DOCUMENT", "IMAGE" ] }, "fileInfo": { "fileName": "Consent Form", "fileSize": 18028, "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "extension": "docx" }, "editableDateFieldSettings": null, "hyperlinkText": "", "conditionalRules": [], "bounds": { "x": 305.00345, "y": 38.004627, "width": 173.10417, "height": 28 }, "pageNumber": 1, "dataSyncTag": "", "dropdownOptions": [], "textAlign": "Left", "textDirection": "LTR", "characterSpacing": 0 } ] } ``` ## Download the attachment using the API To download the attachment, you'll use the `documentId` and `attachmentId` as query parameters in the following endpoint: `v1/document/downloadAttachment.` Here are example code snippets in different programming languages that demonstrate how to perform the download: ### Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/downloadAttachment?documentId={Your document Id}&attachmentId={Your attachment Id}' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your API-KEY"); var documentClient = new DocumentClient(apiClient); var documentStream = documentClient.DownloadAttachment("{Your document Id}", "{Your attachment Id}"); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/downloadAttachment?documentId={Your document Id}&attachmentId={Your attachment Id}" payload={} headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = axios.get('https://api.boldsign.com/v1/document/downloadAttachment', { params: { 'documentId': '{Your document Id}', 'attachmentId': '{Your attachment Id}' }, responseType: "stream", headers: { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } }); ``` {% /codetab %} In the provided examples, make sure to replace `{Your document Id}` with the actual ID of the document and `{Your attachment Id}` with the actual ID of the attachment that you intend to download, which you obtained from the properties API. After executing the code, the document will be generated, and you'll be able to proceed with downloading it. --- # File: how-to-guides\download-document.md # Download document using BoldSign API BoldSign allows you to download the document that has been sent for signature. This document can be downloaded by the signers, senders, and CC recipients of the document. Follow these steps to successfully download the document you have sent ## Request document download using BoldSign API To initiate the document download, you'll need to use the document ID of the specific document you want to download. Here are example codes you can use to perform the download: ### Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/download?documentId={Your document Id}' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your API-KEY"); var documentClient = new DocumentClient(apiClient); var documentStream = documentClient.DownloadDocument("{Your document Id}"); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/download?documentId={Your document Id}" payload={} headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = axios.get('https://api.boldsign.com/v1/document/download', { params: { 'documentId': '{Your document Id}' }, responseType: "stream", headers: { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } }); ``` {% /codetab %} In the provided examples, ensure that you replace the `documentId` with the actual ID of the document you intend to download. Upon executing the code, the document will be generated, and you will be able to proceed with downloading it. --- # File: how-to-guides\download-document-in-base64-format.md # How to Download a Document as Base64 Using the BoldSign API You can retrieve a document in **Base64 format** by adding the `x-response-format` header with the value `base64` to your request. When enabled, the API returns the document as a Base64-encoded string along with its content type and file name. *** ## Example curl Request (Base64 Response) ```shell curl -X GET 'https://api.boldsign.com/v1/document/download?documentId=YOUR_DOCUMENT_ID' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' \ -H 'x-response-format: base64' ``` *** ### Header Parameter {% nestedtable %} * {% arguments name="x-response-format" /%}{% batch datatype="string" /%} * Set this to `base64` to receive the document content as a Base64-encoded string. {% /nestedtable %} The response also includes a `fileName` field, which reflects a system‑generated file name. By default, it includes the predefined document title and its status (for example: `Contract_Completed.pdf`). For more details, refer to: ## Base64 Response Format **200 – Success** ```json { "fileName": "Contract_Completed.pdf", "contentType": "application/pdf", "file": "JVBERi0xLjcNCiVi...base64encodedstring...ZCVFDQo=" } ``` **Response Fields:** * **fileName** – The name of the downloaded file * **contentType** – The MIME type of the document (e.g., `application/pdf`) * **file** – The Base64‑encoded content of the file ## Other Endpoints Supporting Base64 Format The `x-response-format: base64` header can also be used with the following endpoints: * **DownloadAuditTrail** * **DownloadAttachment** * **Template Download** endpoints All of these endpoints follow the same Base64 retrieval pattern. --- # File: how-to-guides\download-on-behalf-of-document.md # Download on behalf of document BoldSign allows you to perform actions on behalf of another user, enhancing document management capabilities. This includes sending documents, accessing audit logs, and downloading documents on behalf of someone else. To achieve this, the user initiating the action needs to be added as a sender identity. A request will be sent to the intended user for approval. Once the user approves the request, you can execute operations on their behalf. Follow these steps to successfully download a document on behalf of someone else: ## 1. Sending document on behalf of another user To download a document on behalf of another user, you initially need to send the document to the signer using the `onBehalfOf` email address. For more information on sending such a document, refer to this article {% customlink href="/how-to-guides/send-document-onbehalf-of-others/" text="Send On Behalf Document" /%}. This step establishes the necessary context for subsequent actions. Once you have sent the document on behalf of another user, a unique document ID is generated for that document. Make sure to copy this document ID, as it will be required for the download process. ## 2. Wait for the signing completion Once the recipient has finished the signing process, you can proceed with downloading the document on their behalf. Note that you cannot download the document without providing the `onBehalfOf` email address that was used when sending the document initially. ## 3. Request for downloading document To initiate the download, use the copied document ID and the `onBehalfOf` email address. This request confirms the authorization to download the document on behalf of the specified user. Here are some codes that you can use to perform the download: ### Code snippet {% codetab %} cURL ```shell curl -X GET 'https://api.boldsign.com/v1/document/download?documentId={Your document Id}&onBehalfOf=alexgayle@cubeflakes.com' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your API-KEY"); var documentClient = new DocumentClient(apiClient); var documentStream = documentClient.DownloadDocument("{Your document Id}", "alexgayle@cubeflakes.com"); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/download?documentId={Your document Id}&onBehalfOf=alexgayle@cubeflakes.com" payload={} headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = await axios.get('https://api.boldsign.com/v1/document/download', { params: { 'documentId': '{Your document Id}', 'onBehalfOf': 'alexgayle@cubeflakes.com' }, responseType: "stream", headers: { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } }); ``` {% /codetab %} In the provided examples, make sure to replace the `documentId` with the actual ID of the document you created earlier. Then, update the `onBehalOf` property with the email address of the user on whose behalf you are performing the action. Upon running the code, the document will be generated and you can proceed to download it. --- # File: how-to-guides\edit-already-created-template-using-API.md # Edit already created template using API If you need to modify a template that you created earlier, BoldSign provides the capability to edit templates using the API. ### Create a template in your account Before you proceed to edit a template, you must have the templates already existing within your account. If you haven't created templates yet, you can follow these steps: - To create a template in the BoldSign web application, refer to the article [Create Template](https://support.boldsign.com/kb/article/31/create-template). - To create a template using the API, follow the steps outlined in the article [Create template through API](https://developers.boldsign.com/template/create-template/). ### Edit the template using the API Once you have templates in your account, you can proceed to edit them using the API. To edit a template within your application, you need to provide the template ID. Here's how you can achieve this: Use the following codes to initiate the template editing process: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/getEmbeddedTemplateEditUrl?templateId={Your template Id}' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ShowTooltip=false' \ -F 'ShowCreateButton=true' \ -F 'ShowSaveButton=true' \ -F 'ShowNavigationButtons=true' \ -F 'Locale=EN' \ -F 'ViewOption=PreparePage' \ -F 'ShowPreviewButton=true' \ -F 'ShowToolbar=true' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "Your-API-KEY"); var templateClient = new TemplateClient(apiClient); // This is an example, add your own template id. var templateId = "{Your template Id}"; var embeddedTemplateEditRequest = new EmbeddedTemplateEditRequest() { TemplateId = templateId, // customize page options ViewOption = PageViewOption.FillingPage, ShowToolbar = true, ShowNavigationButtons = false, ShowSaveButton = false, ShowPreviewButton = true, ShowCreateButton = false, ShowTooltip = false, }; var embeddedTemplateEdited = await templateClient.GetEmbeddedTemplateEditUrlAsync(embeddedTemplateEditRequest).ConfigureAwait(false); var templateEditUrl = embeddedTemplateEdited.EditUrl; ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/getEmbeddedTemplateEditUrl?templateId={Your template Id}" payload = { 'ShowToolbar': 'false', 'ViewOption': 'PreparePage', 'ShowSaveButton': 'true', 'ShowCreateButton': 'true', 'ShowPreviewButton': 'true', 'ShowNavigationButtons': 'true', 'ShowTooltip': 'false', } headers = { 'Accept': 'application/json', 'X-API-KEY': '{Your-API-KEY}' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js var axios = require('axios'); var FormData = require('form-data'); var data = new FormData(); data.append('ShowToolbar', 'false'); data.append('ViewOption', 'PreparePage'); data.append('ShowSaveButton', 'true'); data.append('ShowCreateButton', 'true'); data.append('ShowPreviewButton', 'true'); data.append('ShowNavigationButtons', 'true'); data.append('ShowTooltip', 'false'); var config = { method: 'post', url: 'https://api.boldsign.com/v1/template/getEmbeddedTemplateEditUrl?templateId={Your template Id}', headers: { 'Content-Type': 'multipart/form-data', 'Accept': 'application/json', 'X-API-KEY': 'Your-API-KEY', ...data.getHeaders() }, data : data }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); }); ``` {% /codetab %} - In the example above, replace `templateId` with the actual ID of the template you want to edit. - Depending on your requirements, you can adjust various options such as `ShowCreateButton,` `ShowSaveButton,` and `ShowNavigationButtons` to control the user interface elements during the editing process. - The `ViewOption` field determines whether users are directed to the form field configuration page `PreparePage` or the document upload page `FillingPage.` - After executing the codes, an URL will be generated in the response body. - Load the generated URL on your website. You will be redirected to the template’s filling page or prepare page based on the `ViewOption` field’s value. - Once editing is completed, click `Save and proceed` to navigate to the prepare page. ![Step 10](/static/images/guides/edit-template/step1.png) - After making necessary modifications in the prepare page, click the `Save template` button to save the edited template. ![Step 11](/static/images/guides/edit-template/step2.png) With these steps, you can successfully edit and save an existing template using the BoldSign API. --- # File: how-to-guides\edit-a-template-using-API.md # How to edit a template using API The Edit Template API in BoldSign allows you to modify the properties of existing and draft templates. This could include modifying the title, description, document message, document title, roles, or form fields associated with the template. You can execute partial updates to a template by specifying only the fields they intend to modify. The API will solely modify the provided fields, leaving the remainder unchanged. However, it is limited to top-level properties. When dealing with nested properties within top-level objects, you must provide the complete object for modification. When you need to update a nested property, you will need to use the [template properties](https://developers.boldsign.com/template/template-details/?region=us) API which will retrieve all the properties of the given template. Now, you can modify the required properties within the nested object and send the updated template object to the edit template API. Use the following codes to initiate the template editing process: ## Code snippet {% codetab %} cURL ```shell curl -X 'PUT' \ 'https://api.boldsign.com/v1-beta/template/edit?templateId={Your Template Id}' \ -H 'accept: */*' \ -H 'X-API-KEY: Your API Key' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Title of the template", "roles": [ { "name": "Customer", "index": 1, "signerOrder": 1, "defaultSignerName": "Alex", "defaultSignerEmail": "alexgayle@boldsign.dev", "signerType": "Signer", "locale": "EN", "formFields": [ { "id": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 20 }, "isRequired": true } ] } ] }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{API-KEY}"); var templateClient = new TemplateClient(apiClient); var formFields = new List { new FormField( id: "Sign", type: FieldType.Signature, pageNumber: 1, isRequired: true, bounds: new Rectangle(x: 150, y: 150, width: 200, height: 30)), }; var templateRoles = new List { new TemplateRole() { Name = "Manager", Index = 1, DefaultSignerName = "Alex", DefaultSignerEmail = "alexgayle@boldsign.dev", SignerType = SignerType.Signer, FormFields = formFields, AllowRoleEdit = true, AllowRoleDelete = true, }, }; var editTemplateRequest = new EditTemplateRequest("{templateId}") { Title = "A new title for template", Roles = templateRoles, }; await templateClient.EditTemplateAsync(editTemplateRequest); ``` Python ```python import boldsign configuration = boldsign.Configuration(api_key = "YOUR_API_KEY") with boldsign.ApiClient(configuration) as api_client: template_api = boldsign.TemplateApi(api_client) form_fields = [ boldsign.FormField( id = "sign_id", name = "sign", fieldType = "Signature", page_number = 1, font = "Helvetica", bounds = boldsign.Rectangle(x = 50, y = 100, width = 100, height = 60), is_required = True ) ] role = boldsign.TemplateRole( index = 1, name = "Manager", defaultSignerName = "Alex Gayle", defaultSignerEmail = "alexgayle@boldsign.dev", signerType = "Signer", formFields = form_fields, ) edit_template_request = boldsign.EditTemplateRequest( title = "A new title for template", enableSigningOrder = False, roles = [role] ) template_api.edit_template(template_id = "YOUR_TEMPLATE_ID", edit_template_request = edit_template_request) ``` NodeJS ```js const axios = require('axios'); const url = 'https://api.boldsign.com/v1-beta/template/edit?templateId={your templateid}'; const headers = { 'Content-Type': 'application/json', 'X-API-KEY': '{API-KEY}' }; const data = { "title": "{A new title for template}", "roles": [ { "name": "Manager", "index": 1, "defaultSignerName": "Alex", "defaultSignerEmail": "alexgayle@boldsign.dev", "signerType": "Signer", "formFields": [ { "id": "Signature1", "type": "Signature", "isRequired": true, "bounds": { "x": 625.0, "y": 293.0, "width": 124.0, "height": 32.0 }, "pageNumber": 1 } ], "enableEditRecipients": true, "enableDeleteRecipients": true } ] }; axios.put(url, data, { headers: headers }) .then(response => { console.log(response.status); console.log(response.data); }) .catch(error => { console.error(error); }); ``` PHP ```php 'application/json', 'X-API-KEY' => '{API-KEY}' // Replace {API-KEY} with your actual API key ]; $data = [ "title" => "A new title for template", "roles" => [ [ "name" => "Manager", "index" => 1, "defaultSignerName" => "Alex", "defaultSignerEmail" => "alexgayle@cubeflakes.com", "signerOrder" => 1, "signerType" => "Signer", "formFields" => [ [ "id" => "Signature1", "type" => "Signature", "isRequired" => true, "bounds" => [ "x" => 625.0, "y" => 293.0, "width" => 124.0, "height" => 32.0 ], "pageNumber" => 1 ] ], "enableEditRecipients" => true, "enableDeleteRecipients" => true ] ] ]; $client = new Client(); try { $response = $client->request('PUT', $url, [ 'headers' => $headers, 'json' => $data ]); $statusCode = $response->getStatusCode(); $responseData = $response->getBody()->getContents(); echo 'HTTP Status: ' . $statusCode . "\n"; echo 'Response: ' . $responseData . "\n"; } catch (Exception $e) { echo 'Error: ' . $e->getMessage() . "\n"; } ``` {% /codetab %} In the example above, replace `templateId` with the actual ID of the template you want to edit and provide values for the properties that you want to update. When the above codes are executed, you can successfully edit and save an existing template. --- # File: how-to-guides\email-authentication-to-the-signer-after-sending-the-document.md # Add Email Authentication After Sending Documents BoldSign enables you to add email authentication for signers, even after a document has already been sent for signature. To authenticate signers via email using the BoldSign API, set the `AuthenticationType` to `EmailOTP` and provide the document ID where the recipient is added. When the recipient attempts to sign the document, they will be required to enter a valid code that will be sent to their email address before they can access the document. Please be aware that if the signer fails the authentication process three times, the document will be locked for security reasons. Below are sample code snippets that demonstrate how to add email authentication for one of a document's recipients: ## Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"authenticationType\": \"EmailOTP\", \"emailId\": \"alexgayle@cubeflakes.com\"}" ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var documentclient = new DocumentClient(apiClient); await documentclient.AddAuthenticationAsync("{documentId}", "alexgayle@cubeflakes.com", AuthenticationType.EmailOTP).ConfigureAwait(false); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}" payload = json.dumps({ "authenticationType": "EmailOTP", "emailId": "alexgayle@cubeflakes.com" }) headers = { 'X-API-KEY': '{your API key}', 'Content-Type': 'application/json' } response = requests.request("PATCH", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); await axios.patch( 'https://api.boldsign.com/v1/document/addAuthentication', { authenticationType: 'EmailOTP', emailId: 'alexgayle@cubeflakes.com' }, { params: { documentId: '{documentId}' }, headers: { 'X-API-KEY': '{Your API key}', 'Content-Type': 'application/json' } } ); ``` PHP ```php false]); $headers = [ 'X-API-KEY' => '{your API key}', 'Content-Type' => 'application/json' ]; $body = '{ "authenticationType": "EmailOTP", "emailId": "alexgayle@cubeflakes.com" }'; $request = new Request('PATCH', 'https://api.boldsign.com/v1/document/addAuthentication?documentId={documentId}', $headers, $body); $res = $client->sendAsync($request)->wait(); echo $res->getBody(); ``` {% /codetab %} In the code examples provided, please ensure that you update the `authenticationType` to `EmailOTP`. Additionally, replace the placeholder `documentId` with the actual ID of the document you created, and update `SignerEmail` with the appropriate signer's email address. Once the code is executed, the document will be secured using Email OTP authentication. This means the signer will only be able to access the document by entering the correct OTP sent to their email. **Note**: For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) --- # File: how-to-guides\embedded-link-expiration.md # How to Configure Embedded Link Expiration In BoldSign, the default expiration for an embedded links is set to 180 days. This means that the link will be expired 180 days after its creation. However, the expiration date is not fixed and can be adjusted according to the user's needs. Embedded links can be created for five different scenarios: 1. Sending a document 2. Sending a document using a template 3. Signing a document 4. Creating a template 5. Editing an already created template The expiration date of an embedded link can also be set during the creation of the link. The range for setting the expiration date is between 1 and 180 days. Here are some code example to create embedded request link from template by setting expiration date ## Code snippet {% codetab %} cURL ```shell curl --location --request POST 'https://api.boldsign.com/v1/template/createEmbeddedRequestUrl?templateId=' \ --header 'X-API-KEY: {Your-API-KEY}' \ --header 'Content-Type: application/json' \ --data-raw '{ "showToolbar": true, "sendViewOption": "FillingPage", "showSaveButton": true, "showSendButton": true, "locale": "EN", "showPreviewButton": true, "showNavigationButtons": true, "showTooltip": false, "linkValidTill": "2024-01-15T08:30:00" }' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your-API-KEY}"); var templateClient = new TemplateClient(apiClient); // This is an example document id, add your own template id created from the web app upon usage. var templateId = ""; var templateRequest = new EmbeddedTemplateRequest( templateId: templateId, title: "Document from Template", message: "This document description") { // customize page options SendViewOption = PageViewOption.FillingPage, Locale = Locales.EN, ShowToolbar = true, ShowNavigationButtons = true, ShowSaveButton = true, ShowPreviewButton = true, ShowSendButton = true, ShowTooltip = false, SendLinkValidTill = DateTime.UtcNow.AddDays(50), }; var documentCreated = await templateClient.CreateEmbeddedRequestUrlAsync(templateRequest); // url to send the document from your web application var sendUrl = documentCreated.SendUrl; ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/createEmbeddedRequestUrl?templateId=" payload = { 'ShowToolbar': 'true', 'ShowSaveButton': 'true', 'ShowSendButton': 'true', 'ShowPreviewButton': 'true', 'Locale': 'EN', 'ShowNavigationButtons': 'true', 'ShowTooltip': 'false', 'SendViewOption': 'FillingPage', 'LinkValidTill': '2024-01-15T08:30:00' } headers = { 'X-API-KEY': '{Your-API-KEY}' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = await axios.post( ' https://api.boldsign.com/v1/template/createEmbeddedRequestUrl', { 'showToolbar': true, 'sendViewOption': 'FillingPage', 'locale': 'EN', 'showSaveButton': true, 'showSendButton': true, 'showPreviewButton': true, 'showNavigationButtons': true, 'showTooltip': false, 'roles': [ { 'roleIndex': 1, 'signerName': 'Signer Name 1', 'signerEmail': 'signer@boldsign.dev', 'role': 'Manager' } ], 'linkValidTill': '2024-01-15T08:30:00' }, { params: { 'templateId': '' }, headers: { 'X-API-KEY': '{Your-API-KEY}', 'Content-Type': 'application/json' } } ).then((response) => { console.log('Response:', JSON.stringify(response.data)); }) .catch((error) => { console.error('Error:', error.message); }); ``` PHP ```php false ]); $url = "https://api.boldsign.com/v1/template/createEmbeddedRequestUrl?templateId=5f5c6576-xxxx-xxxx-a8ef-9234ca1e7c67"; $payload = [ 'ShowToolbar' => 'true', 'ShowSaveButton' => 'true', 'ShowSendButton' => 'true', 'ShowPreviewButton' => 'true', 'Locale' => 'EN', 'ShowNavigationButtons' => 'true', 'ShowTooltip' => 'false', 'SendViewOption' => 'FillingPage', 'LinkValidTill' => '2024-07-30T08:30:00' ]; $headers = [ 'X-API-KEY' => '{Your API Key}' ]; try { $response = $client->post($url, [ 'json' => $payload, 'headers' => $headers ]); echo $response->getBody(); } catch (ClientException $e) { echo 'Request failed: ' . $e->getMessage(); echo "\nResponse: " . $e->getResponse()->getBody()->getContents(); } ``` {% /codetab %} In the above example, replace `` with the ID of the template you want to use to create an embedded request link. Set the `linkValidTill` property to your desired expiration date. Upon executing the above code, an embedded link will be generated with the set expiration date. This link can then be used to send a document out for signature before it expires. --- # File: how-to-guides\embed-the-document-creation-into-your-application.md # Embed Document Creation in Your Application Integrating embedded document creation into your application allows you to seamlessly incorporate BoldSign's document creation functionalities within your app's user interface. When utilizing the embedded document feature, documents generated will remain in the `draft` state until users finalize the creation process via the provided URL. Follow these steps to seamlessly integrate document creation into your application: ## 1. Customize UI for embed document request In your application, create a user interface (UI) that allows users to input relevant information for the embedded document request. This information will be used to create the document. For instance, collect user inputs for the following parameters: - `Title` - `Message` - `Signers` - Other customization options (e.g., ShowToolbar, ShowSaveButton, SendViewOption, etc.) Here are example codes that demonstrate how to create an embedded document: ### Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/document/createEmbeddedRequestUrl' \ -H 'X-API-KEY: {your API key}' \ -F 'Title=Sent from API Curl' \ -F 'ShowToolbar=true' \ -F 'ShowNavigationButtons=true' \ -F 'ShowPreviewButton=true' \ -F 'ShowSendButton=true' \ -F 'ShowSaveButton=true' \ -F 'SendViewOption=PreparePage' \ -F 'ShowTooltip=false' \ -F 'Locale=EN' \ -F 'Message=This is document message sent from API Curl' \ -F 'EnableSigningOrder=false' \ -F 'Signers[0][Name]=Signer Name 1' \ -F 'Signers[0][EmailAddress]=alexgayle@cubeflakes.com' \ -F 'Files=@{Your file Path};type=application/pdf' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentRequest = new EmbeddedDocumentRequest { Title = "Sent from API SDK", Message = "This is document message sent from API SDK", Signers = new List { new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", locale: Locales.EN), }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", // directly provide file path FilePath = "{Your file path}", }, }, // customize page options SendViewOption = PageViewOption.PreparePage, Locale = Locales.EN, ShowToolbar = true, ShowNavigationButtons = true, ShowSaveButton = true, ShowPreviewButton = true, ShowSendButton = true, ShowTooltip = false, }; var documentCreated = await documentClient.CreateEmbeddedRequestUrlAsync(documentRequest); // url to send the document from your web application var documentSendUrl = documentCreated.SendUrl; ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/createEmbeddedRequestUrl" payload={ 'Title': 'Sent from API Curl', 'ShowToolbar': 'true', 'ShowNavigationButtons': 'true', 'ShowPreviewButton': 'true', 'ShowSendButton': 'true', 'ShowSaveButton': 'true', 'SendViewOption': 'FillingPage', 'ShowTooltip': 'false', 'Locale': 'EN', 'Message': 'This is document message sent from API Curl', 'EnableSigningOrder': 'false', 'Signers[0][Name]': 'Signer Name 1', 'Signers[0][EmailAddress]': 'signer1@boldsign.dev'} files=[ ('Files',('file',open('{file path}','rb'),'application/pdf')) ] headers = { 'X-API-KEY': '{your API key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('Title', 'Sent from API Curl'); form.append('ShowToolbar', 'true'); form.append('ShowNavigationButtons', 'true'); form.append('ShowPreviewButton', 'true'); form.append('ShowSendButton', 'true'); form.append('ShowSaveButton', 'true'); form.append('ShowTooltip', 'false'); form.append('Locale', 'EN'); form.append('Message', 'This is document message sent from API Curl'); form.append('EnableSigningOrder', 'false'); form.append('Signers[0][Name]', 'Signer Name 1'); form.append('Signers[0][EmailAddress]', 'signer1@boldsign.dev'); form.append('Files', fs.createReadStream('{Your file path}')); const response = axios.post( 'https://api.boldsign.com/v1/document/createEmbeddedRequestUrl', form, { headers: { 'Accept': 'application/json', 'X-API-KEY': '{Your-API-KEY}' } } ); ``` {% /codetab %} In the above example, replace placeholders (`Title,` `Message,` etc,.) with actual input values gathered from your application's UI. If your application supports multiple signers, tailor the UI accordingly. Update values within the `Signers` array to match customized signers. Customize button options (`ShowSaveButton,` `ShowSendButton,` etc,.) based on requirements by setting them to `true` or `false.` To direct users to a form field configuration page, set `SendViewOption` to `PreparePage`. For a document upload page, set `SendViewOption` to `FillingPage.` Executing the provided code will generate an embed link, and the document will be stored in draft status within your BoldSign account. ## 2. Utilize the Generated Link in an iFrame Once the embed link is generated, integrate it into an iFrame within your application. This iFrame enables your application users to: - Add extra signers - Upload additional documents - Configure form fields - Send the document to the signer for signing After sending the document, it will be delivered to the signer via email. This approach streamlines document creation for users, enhancing their experience and promoting efficient document management within your application. --- # File: how-to-guides\embed-the-template-creation-into-your-application.md # How to Embed Template Creation in Your App Integrating embedded template creation into your application allows you to seamlessly incorporate BoldSign's template creation functionalities within your app's user interface. When utilizing the embedded template feature, any templates generated will remain in the `draft` state until users finalize the creation process via the provided URL. Follow these steps to seamlessly integrate template creation into your application: ## 1. Customize UI for embed template request In your application, create a user interface (UI) that allows users to input relevant information for the embedded template request. This information will be used to create the template. For instance, you can collect user inputs for the following parameters: - `Title` - `Description` - `DocumentTitle` - `DocumentMessage` - `Roles` - Other customization options (e.g., ShowToolbar, ShowSaveButton, ViewOption, etc.) Here are example codes that demonstrate how to create an embedded template: ### Code snippet {% codetab %} cURL ```shell curl --location --request POST 'https://api.boldsign.com/v1/template/createEmbeddedTemplateUrl' \ --header 'X-API-KEY: {Your API Key}' \ --form 'Title=" API template"' \ --form 'Description=" API template description"' \ --form 'DocumentTitle=" API document title"' \ --form 'DocumentMessage=" API document message description"' \ --form 'Roles[0][name]="Manager"' \ --form 'Roles[0][index]="1"' \ --form 'Roles[0][language]="English"' \ --form 'ShowToolbar="true"' \ --form 'ShowSaveButton="true"' \ --form 'ShowSendButton="true"' \ --form 'ShowPreviewButton="true"' \ --form 'ShowNavigationButtons="true"' \ --form 'ShowTooltip="false"' \ --form 'ViewOption="PreparePage"' \ --form 'Files=@"{Your file path}"' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var templateClient = new TemplateClient(apiClient); var templateRequest = new CreateEmbeddedTemplateRequest { Title = "Template created from API SDK", Description = "The is a template created to get a quick contract sign.", DocumentTitle = "Sent using template created from API SDK", DocumentMessage = "This is document message sent from API SDK", Roles = new List { new TemplateRole( roleIndex:1, name: "Manager", signerType: SignerType.Signer, locale: Locales.EN), }, Files = new List { new DocumentFilePath { ContentType = "application/pdf", // directly provide file path FilePath = "{Your file path}", }, }, // customize page options ViewOption = PageViewOption.PreparePage, ShowToolbar = true, ShowNavigationButtons = true, ShowSaveButton = true, ShowPreviewButton = false, ShowCreateButton = true, ShowTooltip = false, }; var templateCreated = await templateClient.CreateEmbeddedTemplateUrlAsync(templateRequest); // url to send the document from your web application var templateCreateUrl = templateCreated.CreateUrl; ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/createEmbeddedTemplateUrl" payload = { 'Title': ' API template', 'Description': ' API template description', 'DocumentTitle': ' API document title', 'DocumentMessage': ' API document message description', 'AllowMessageEditing': ' true', 'Roles[0][name]': 'Manager', 'Roles[0][index]': '1', 'Roles[0][language]': "English", 'ShowToolbar': 'true', 'ShowSaveButton': 'true', 'ShowSendButton': 'true', 'ShowPreviewButton': 'true', 'ShowNavigationButtons': 'true', 'ShowTooltip': 'false', 'ViewOption': 'PreparePage'} files=[ ('Files',('file',open('{Your file path}','rb'),'application/pdf)) ] headers = { 'X-API-KEY': '[YOUR-API-KEY]' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('Title', ' API template'); form.append('Description', ' API template description'); form.append('DocumentTitle', ' API document title'); form.append('DocumentMessage', ' API document message description'); form.append('Roles[0][name]', ' Manager'); form.append('Roles[0][index]', ' 1'); form.append('Roles[0][language]', ' English'); form.append('ShowToolbar', ' true'); form.append('ShowSaveButton', ' true'); form.append('ShowSendButton', ' true'); form.append('ShowPreviewButton', ' true'); form.append('ShowNavigationButtons', ' true'); form.append('ShowTooltip', 'false'); form.append('ViewOption', ' PreparePage'); form.append('Files', fs.createReadStream('{Your file path}')); const response = axios.post( ' https://api.boldsign.com/v1/template/createEmbeddedTemplateUrl', form, { headers: { ...form.getHeaders(), 'X-API-KEY': '{Your API key}' } } ); ``` {% /codetab %} In this example, replace the placeholders (`Title,` `Description,` etc.) with actual input values gathered from your application's UI. If your application supports multiple roles, customize the UI accordingly to accommodate multiple roles. Update the values within the `Roles` array to match the customized roles. Additionally, you can customize button options (`ShowSaveButton,` `ShowSendButton,` etc.) based on your requirements by setting them to `true` or `false`. To direct users to a form field configuration page, set `ViewOption` to `PreparePage`. For a document upload page, set `ViewOption` to `FillingPage.` Executing the provided code will generate an embed link, and the template will be stored in draft status within your BoldSign account. ## 2. Utilize the generated link in an iFrame Once the embed link is generated, integrate it into an iFrame within your application. This iFrame will enable your application users to: - Add extra roles - Upload additional documents - Configure form fields - Save the template to your BoldSign account through your application Subsequently, you can leverage this embedded template for sending documents for signature within your application. This approach streamlines the template creation process for your users, enhancing their experience and promoting efficient document management within your application. --- # File: how-to-guides\extend-the-expiry-date-of-the-document.md # How to Extend Expiry Date for Documents In cases where a signer is unable to complete the signing process within the initial expiry date, BoldSign provides the flexibility to extend the expiry date of the document. This extension can only be performed by the sender and account admins. It's important to note that this action cannot be used to reduce the expiry date of a document, and it can only be applied to documents that have not been signed yet. Follow these steps to extend the expiry date of a document using the BoldSign API ## Check expiry type and date Before extending the expiry date, you need to retrieve the existing expiry type and expiry date of the document from the document properties. The following code snippets demonstrate how to obtain the document properties using the API **Code snippet** {% codetab id="codetab1" %} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/properties?documentId={documentId}' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your-api-key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentProperties = documentClient.GetProperties("{documentId}"); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/properties?documentId={documentId}" payload={} headers = { 'accept': 'application/json', 'X-API-KEY': '{your-api-key}' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = axios.get('https://api.boldsign.com/v1/document/properties', { params: { 'documentId': '{documentId}' }, headers: { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } }); ``` {% /codetab %} In the provided examples, replace `documentId` with the actual ID of the document for which you need to extend the expiry time. Once executed, the document properties will be retrieved in JSON, including `expiryDateType` and `expiryValue`. Here, `expiryDateType` could be `Days`, `Hours`, or `SpecificDateTime`, while `expiryValue` will be a timestamp. You can convert this timestamp into a human-readable DateTime format. ## Extending the document expiry The following code snippets demonstrate how to extend the document's expiry using the API: **Code snippet** {% codetab id="codetab2" %} cURL ```shell curl -X PATCH "https://api.boldsign.com/v1/document/extendExpiry?documentId={documentId}" -H 'X-API-KEY: {your API key}' -H "Content-Type: application/json" -d "{\"newExpiryValue\": \"2022-12-15\", \"warnPrior\": true}" ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{apikey}"); var documentclient = new DocumentClient(apiClient); await documentclient.ExtendExpiryAsync("{documentId}", "2022-12-15", true).ConfigureAwait(false); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/extendExpiry?documentId={documentId}" payload = json.dumps({ "newExpiryValue": "2022-12-15", "warnPrior": True }) headers = { 'X-API-KEY': '{your API key}', 'Content-Type': 'application/json' } response = requests.request("PATCH", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); axios.patch( 'https://api.boldsign.com/v1/document/extendExpiry', { newExpiryValue: '2022-12-15', warnPrior: true }, { params: { documentId: '{documentId}' }, headers: { 'X-API-KEY': '{Your API key}', 'Content-Type': 'application/json' } } ); ``` {% /codetab %} In the provided examples, replace `documentId` with the ID of the document that requires an extended expiry date. Adjust `newExpiryValue` based on the `expiryDateType` you obtained from the document properties. If the `expiryDateType` is `Days`, set the value in "yyyy-MM-dd" format (e.g., "2023-12-20"). If it is `Hours`, use an integer (e.g., "12"). For `SpecificDateTime`, use an ISO date-time format (e.g., "2023-12-20T01:30:00.000-05:00"). Ensure that `newExpiryValue` is greater than the original expiryValue. Replace `warnPrior` with `true` or `false` to enable or disable sending a reminder one day before the new expiration date. Upon executing the code, the document's expiry date will be successfully extended to the specified date. --- # File: how-to-guides\get-the-uploaded-identity-verification-document.md # Get Uploaded Identity Verification Documents BoldSign allows you to fetch the document uploaded by the signer for identity verification via API. These images are available whether the verification process is successful or fails, and they can only be accessed by the sender. To retrieve these images, you first need the image file ID associated with the signer-uploaded document. This file ID can be obtained through the Identity Verification Report API, which provides details about the verification process and the associated file IDs. Refer to this for [verificaton report](https://developers.boldsign.com/identity-verification/verification-report/?region=us). Once you have the file ID, you can make a request to the Identity Verification Image API to access the images. This ensures you can review and validate the documents submitted by the signer during the verification process. Below are examples of how to get the uploaded verification document via API: ## Code snippet {% codetab %} cURL ```shell curl --location 'https://api.boldsign.com/v1-beta/identityVerification/image?documentId={document Id}' \ --header 'Content-Type: application/json' \ --header 'X-API-KEY: {your-api-key}' \ --data-raw '{ "emailId": "alexgayle@cubeflakes.com", "order": 1, "fileId": "{file Id}" }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your-api-key}"); var idVerificationClient = new IdVerificationClient(apiClient); var documentId = "{document Id}"; var verificationImageRequest = new VerificationImageRequest() { EmailId = "alexgayle@cubeflakes.com", FileId = "{file Id}", Order = 1, }; var idVerificationImage = idVerificationClient.GetImage(documentId, verificationImageRequest); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1-beta/identityVerification/image?documentId={document Id}" payload = { "emailId": "alexgayle@cubeflakes.com", "order": 1, "fileId": "{file Id}" } headers = { 'Content-Type': 'application/json', 'X-API-KEY': '{your-api-key}' } response = requests.request("POST", url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = "https://api.boldsign.com/v1-beta/identityVerification/image?documentId={document id}"; const payload = { emailId: "alexgayle@cubeflakes.com", order: 1, fileId: "{file Id}" }; const headers = { 'Content-Type': 'application/json', 'X-API-KEY': '{your-api-key}' }; axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error.response.data); }); ``` PHP ```php 'alexgayle@cubeflakes.com', 'order' => 1, 'fileId' => '{file id}' ]; $headers = [ 'Content-Type' => 'application/json', 'X-API-KEY' => '{your-api-key}' ]; $client = new GuzzleHttp\Client([ 'verify' => false, ]); $response = $client->post($url, [ 'headers' => $headers, 'json' => $payload ]); echo $response->getBody()->getContents(); ?> ``` {% /codetab %} In the provided code example, make sure to replace values for `documentId` with the ID of the document that you want to fetch the document from. Additionally, provide the`fileId` with the image file ID of the signer uploaded document, `emailId` value with the email address of the user for which the report is to be fetched. If signing order was enabled, you can specify the `order` value to differentiate which order you are getting the report from. Once the codes are executed, verification images will be compiled and downloaded in a zip file. --- # File: how-to-guides\hide-document-id.md # Hide Document ID When Sending Documents When sending documents to signers via BoldSign, you might have specific preferences regarding the visibility of document IDs within the document itself. BoldSign provides a feature that allows you to control whether the document ID should be visible in the document or not. ## Hide document ID in the document When you want to hide the document ID in the document, set the `HideDocumentId` property to `true` in the `send` API call. Here are code examples demonstrating how to achieve this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'HideDocumentId= true' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", HideDocumentId = true, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 1, "height": 1 }, "isRequired": True } ], "locale": "EN" } payload = { 'HideDocumentId': True, 'Message': '', 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ( 'doc-2.pdf', open('{Your file path}', 'rb'), 'application/pdf' )) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('HideDocumentId', 'true'); data.append('Message', ''); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "string",\r\n "name": "string",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 1,\r\n "height": 1\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In these examples, set the `HideDocumentId` property to `true` to hide the document ID in the document. When executing the above code, ensure that you provide the necessary fields such as `Files,` `Title,` and `Signers.` By following these steps and setting the `HideDocumentId` property as needed, you can control whether the document ID is visible or hidden in the documents you send via BoldSign API. For a visual reference, take a look at the images as follows. **Document Id visible in the document** ![Step 1](/static/images/guides/document-id-stamping/step1.webp) **Document Id hidden in the document** ![Step 2](/static/images/guides/document-id-stamping/step2.webp) --- # File: how-to-guides\how-to-add-additional-files-while-sending-document-from-template.md # Add Additional Files When Sending from Template BoldSign supports adding additional files when sending a document from a template using the API. Using `Files` property, you can add additional file. The "v1/template/send" API endpoint now supports both `multipart/form-data` and `application/json` content types. This article will guide you on how to add additional files when sending a document from a template using the API. Below are a few code examples demonstrating how to add additional files when sending a document from a template using the API. ## Code snippet using multipart/form-data {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=d6bad813-xxxx-xxxx-8c9e-e91a96c06392' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'files=@{path to your file}' \ -F 'title=Sample document' \ -F 'message=Kindly review and sign this.' \ -F 'roles[0][roleIndex]=1' \ -F 'roles[0][signerName]=Richard' \ -F 'roles[0][signerEmail]=richard@boldsign.dev' \ -F 'roles[0][privateMessage]=Please check and sign the document.' \ -F 'roles[0][signerType]=Signer' \ -F 'roles[0][signerRole]=Manager' \ -F 'roles[0][formFields][0][id]=SignField' \ -F 'roles[0][formFields][0][fieldType]=Signature' \ -F 'roles[0][formFields][0][pageNumber]=1' \ -F 'roles[0][formFields][0][bounds][x]=100' \ -F 'roles[0][formFields][0][bounds][y]=100' \ -F 'roles[0][formFields][0][bounds][width]=100' \ -F 'roles[0][formFields][0][bounds][height]=50' \ -F 'roles[0][formFields][0][isRequired]=true' \ -F 'roles[0][locale]=EN' ``` C# ```C# using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var documentFilePath= new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var templateRole = new Roles( roleSignerName:"Richard", roleSignerEmailAddress:"richard@boldsign.dev", roleSignerIndex:1, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { Files = filesToUpload, TemplateId = "cda4932f-xxxx-xxxx-8a5e-72ce7883e727", Roles = roles, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId); ``` {% /codetab %} ## Code snippet using application/json {% codetab id="codetab2" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=cda4932f-xxxx-xxxx-8a5e-72ce7883e727' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Sample document", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richard@boldsign.dev", "privateMessage": "Please check and sign the document.", "signerType": "Signer", "signerRole": "Manager", "locale": "EN" } ], "files": [ "data:application/{{fileType}};base64,{{content}}" ] }' ``` {% /codetab %} In the example above, replace `templateId` with the ID of the template you created earlier. Then, update the `SignerEmail` and `SignerName` properties with the email and name of the signer to whom you want to send the document, and add any additional files. Once you run the code, the document will be sent for signature with the additional files included. --- # File: how-to-guides\how-to-add-file-as-base64-string-while-sending-document.md # Add File as Base64 When Sending a Document BoldSign allows you to send files in base64 string format for e-signature using the `files` property. The .pdf, .png, .jpg, .docx, .xlsx and .pptx are supported file formats. The preferred file format is .pdf. You can refer the following link for [supported file formats](https://support.boldsign.com/kb/article/154/supported-file-formats-and-sizes#:~:text=BoldSign%20supports%20PDF%2C%20JPG%2C%20PNG,should%20not%20be%20over%2025MB). The base64 format should be in the following format `data:application/{{fileType}};base64,{{content}}`. Here is an example demonstrating how to add a file as a base64 string when sending a document for e-signature using BoldSign API: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY:{Your API Key}' \ -H 'Content-Type: application/json' \ -d '{ "Message": "Please sign this.", "Signers": [ { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" } ], "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Agreement" }' ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Message': 'Please sign this.', 'Signers': [signer_data], 'Title': 'Agreement', 'Files': [ 'data:application/pdf;base64,JVBERi0xLjcNCi...' ] } headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = "https://api.boldsign.com/v1/document/send"; const signerData = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": true } ], "locale": "EN" }; const payload = { 'Message': 'Please sign this.', 'Signers': [signerData], 'Title': 'Agreement', 'Files': [ 'data:application/pdf;base64,JVBERi0xLjcNCi...' ] }; const headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' }; axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` {% /codetab %} In the provided code examples, make sure to replace the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document. After executing the above code, you can send the base64 string format file for signature request. --- # File: how-to-guides\how-to-add-file-from-fileurl-while-sending-document.md # Add Files Using File URLs When Sending BoldSign allows you to add files using file URLs for e-signature using the `FileUrls` property. The supported file formats that can be used in `FileUrls` are .pdf, .png, .jpg, .docx, .xlsx and .pptx. The .pdf is the preferred format. You can refer to the following link for [supported file formats](https://support.boldsign.com/kb/article/154/supported-file-formats-and-sizes#:~:text=BoldSign%20supports%20PDF%2C%20JPG%2C%20PNG,should%20not%20be%20over%2025MB). Make sure that the header content-type in the file URL should be in proper format like application/pdf, application/msword. Here is an example demonstrating how to add a file using a file URL when sending a document for eSignature using the BoldSign API. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY:{Your API Key}' \ -H 'Content-Type: application/json' \ -d '{ "Message": "Please sign this.", "Signers": [ { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" } ], "FileUrls": [ "https://www.dropbox.com/scl/fi/jcya44l0ui2sq4rjl0wsg/Customer-Contract-Form-Cubeflex.pdf?rlkey=earhpfci3i2zqzugcchxkb451&st=sjbm7jcs&dl=1" ], "Title": "Customer-Contract-Form-Cubeflex" }' ``` C# ```C# using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentClient = new DocumentClient(apiClient); var signatureField = new FormField( id: "sign", isRequired: true, type:FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "Alex", signerType: SignerType.Signer, signerEmail: "alexgayle@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; List uriList = new List { new Uri("https://www.dropbox.com/scl/fi/v5vj574fdb1zgkawgud8p/FL-Landlord-and-Tenant-Law-Problem.pdf?rlkey=68e21wfenuyqvolr4jl07yt8p&st=k8ryipoe&dl=1") }; var sendForSign = new SendForSign() { Message = "Please sign this", Title = "Agreement", HideDocumentId = false, Signers = documentSigners, = uriList }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Message': 'Please sign this.', 'Signers': [signer_data], 'Title': 'Agreement', 'FileUrls': [ 'https://www.dropbox.com/scl/fi/jcya44l0ui2sq4rjl0wsg/Customer-Contract-Form-Cubeflex.pdf?rlkey=earhpfci3i2zqzugcchxkb451&st=sjbm7jcs&dl=1' ] } headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = "https://api.boldsign.com/v1/document/send"; const signerData = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": true } ], "locale": "EN" }; const payload = { 'Message': 'Please sign this.', 'Signers': [signerData], 'Title': 'Agreement', 'FileUrls': [ 'https://www.dropbox.com/scl/fi/jcya44l0ui2sq4rjl0wsg/Customer-Contract-Form-Cubeflex.pdf?rlkey=earhpfci3i2zqzugcchxkb451&st=sjbm7jcs&dl=1' ] }; const headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' }; axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` {% /codetab %} In the provided code examples, make sure to replace the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document. After executing the above code, document in the `FileUrls` will be sent to signer for signature request. --- # File: how-to-guides\how-to-add-metadata-while-sending-document.md # How to Add Metadata When Sending a Document The metadata can be used to store additional information about the document in the form of key-value pairs. In the context of digital documents, metadata is essential for defining and categorizing various aspects of the document. BoldSign allows you to add metadata for the document while sending document for e-signature. You can add meta data for the document by using `MetaData` property. Here is an example demonstrating how to add metadata while sending a document for e-signature using the BoldSign API: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY:{Your API Key}' \ -H 'Content-Type: application/json' \ -d '{ "Message": "Test document", "Signers": [ { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" } ], "Files": [ "data:application/pdf;base64,JVBERi0xLjcKJcfs..." ], "Title": "Sampledocument", "MetaData": { "DocumentType": "new", "DocumentCategory": "Software" } }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type:FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "Alex", signerType: SignerType.Signer, signerEmail: "alexgayle@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var metaData = new Dictionary() { ["DocumentType"] = "new", ["DocumentCategory"] = "software", }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, MetaData = metaData }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "sign1", "name": "sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Message': 'Please sign this.', 'Signers': [signer_data], 'Title': 'Agreement', 'Files': [ 'data:application/pdf;base64,JVBERi0xLjcNCi...' ], 'MetaData': { 'DocumentType': 'new', 'DocumentCategory': 'Software' } } headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = "https://api.boldsign.com/v1/document/send"; const signerData = { "name": "Alex", "emailAddress": "alexgayle@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "string", "name": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": true } ], "locale": "EN" }; const payload = { 'Message': 'Please sign this.', 'Signers': [signerData], 'Title': 'Agreement', 'Files': [ 'data:application/pdf;base64,JVBERi0xLjcNCi...' ], 'MetaData': { 'DocumentType': 'new', 'DocumentCategory': 'Software' } }; const headers = { 'Content-Type': 'application/json', 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' }; axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` {% /codetab %} In the provided code examples, update the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document to. By following the code snippets provided, you can send documents with the meta data using BoldSign API. --- # File: how-to-guides\How-to-allow-signers-to-configure-their-own-form-fields.md # How to Allow Signers to Configure Form Fields BoldSign supports signers in configuring their own form fields while signing the document. This article will guide you on how to enable signers to configure their own form fields using the API. You can allow signers to configure form fields by setting `AllowFieldConfiguration` as `true` while sending the document via API. Here are a few code examples that demonstrate how to enable signers to configure form fields. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "allowFieldConfiguration":"true" "formFields": [ { "id": "Sign", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 100, "height": 60 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "signature", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 600, width: 125, height: 25)) var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); signer.AllowFieldConfiguration = true; var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "allowFieldConfiguration":True, "formFields": [ { "id": "Signature", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document", 'CC': json.dumps(cc_recipients) } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "David",\r\n "emailAddress": "david@cubeflakes.com",\r\n "signerType": "Signer",\r\n "allowFieldConfiguration": true,\r\n "formFields": [\r\n {\r\n "id": "Signature",\r\n "Type": "FieldType.Signature", \r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 100\r\n },\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above examples, update `AllowFieldConfiguration` to `true`. After executing the above code, the document will be sent to the signer, and then the signer can configure the form fields and sign the document. --- # File: how-to-guides\How-to-allow-signers-to-print-and-sign-the-document.md # Allow signers to Print & Sign documents BoldSign supports signers to allow printing and signing the document. This article will guide you on how to enable signers to print and sign the document using the API. You can allow signers to print and sign the document by setting `EnablePrintAndSign` to true when sending the document via API. Below are a few code examples demonstrating how to allow signers to print and sign the document. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "formFields": [ { "id": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 100, "height": 20 }, "isRequired": true } ], "locale": "EN" }' \ -F 'EnablePrintAndSign=true' \ 'Files={your file}' \ -F 'Title=Print and Sign' \ ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "EN" } headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document", 'EnablePrintAndSign':True, } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function GetData(){ try{ const FormData = require('form-data'); const fs = require('fs'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Signers', '{\r\n "name": "David", \r\n "emailAddress": "david@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "Signature",\r\n "Type": "FieldType.Signature", \r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n }, \r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('EnablePrintAndSign',"true"); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', ...data.getHeaders() }, data : data }; const response = await axios.request(config); console.log(JSON.stringify(response.data)); return response.data.documentId; } catch (error) { console.error('Error:', error.message); throw error; } } GetData(); ``` {% /codetab %} In the example code above, by setting EnablePrintAndSign to true, the document will be sent to the signer, who can then proceed to print and sign it. --- # File: how-to-guides\how-to-allow-the-signer-to-sign-in-a-particular-order.md # Allow Signers to Sign in a Specific Order In BoldSign, enabling the signing order option allows you to specify the sequence in which signers will receive the email and subsequently sign the document. This ensures that documents are handled in an organized and accountable manner.This guide will go through the process of how to enable signing order using BoldSign API. You can enable signers to sign in a specific order by setting `EnableSigningOrder` to `true` and configuring the `SignerOrder` property accordingly. Here are example codes that can be used to achieve this: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'EnableSigningOrder=True' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "signerOrder": 1, "formFields": [ { "id": "Signature1", "name": "Signature2", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Signers={ "name": "hanky", "emailAddress": "hanky@cubeflakes.com", "signerType": "Signer", "signerOrder": 2, "formFields": [ { "id": "Signature2", "name": "Signature2", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data1 = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "signerOrder": 1, "formFields": [ { "id": "Signature1", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "EN" } signer_data2 = { "name": "Hanky", "emailAddress": "hanky@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "signerOrder": 2, "formFields": [ { "id": "Signature2", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "EN" } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } payload = { 'Signers': [json.dumps(signer_data1), json.dumps(signer_data2)], 'EnableSigningOrder':True, 'Title':"Signing order document" } files = [ ('Files', ('{file name}', open('Your file path', 'rb'), 'application/pdf')) ] response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Message', 'Please sign this'); data.append('Signers', '{\r\n "name": "Hanky",\r\n "signerOrder": 1,\r\n "emailAddress": "david@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "signature",\r\n "name": "signature",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 100,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Signers', '{\r\n "name": "Cilian",\r\n "signerOrder": 2,\r\n "emailAddress": "hanky@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": \r\n [\r\n {\r\n "id": "sign_1",\r\n "name": "sign_1",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 50,\r\n "y": 50,\r\n "width": 100,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n }'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', 'Sample document'); data.append('EnableSigningOrder', 'true'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In conclusion, by setting `EnableSigningOrder` to `true` and configuring the `SignerOrder` property accordingly, you can effectively enable signers to sign documents in a predetermined sequence. After executing the above code, the document will be created, and an email will be sent to the first signer. Once the first signer completes the signing process, an email will be sent to the next signer based on the signer order. --- # File: how-to-guides\how-to-create-custom-field.md # How to Create New Custom Fields Easily Custom Fields help organize documents by allowing you to create and reuse fields tailored to your needs. These fields are used to store frequently used information, ensuring consistency across documents and reducing repetitive tasks. Once created, a Custom Field is linked to your brand, making it easy to drag and drop into any document, quickly filling in details without manual entry. To set up a custom field via the API, provide key details like `fieldName,` `description,` `order,` and `formfield` settings. To prevent team members from editing the Id of the custom field, specify the `idPrefix` and set `restrictIdPrefixChange` to `true`. Below are examples of how to create a custom form field for Phone Number using TextBox field: ## Code snippet {% codetab %} cURL ```shell curl -X POST \ 'https://api.boldsign.com/v1/customField/create' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your api key}' \ -H 'Content-Type: application/json' \ -d '{ "fieldName": "PhoneNumber", "fieldDescription": "Signer Contact details", "fieldOrder": 1, "brandId": "{your brand Id}", "sharedField": true, "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": true, "validationType": "NumbersOnly" } }' ``` C# ```csharp var client = new HttpClient(); var apiClient = new ApiClient("https://api.boldsign.com", "API-KEY"); var customFieldClient = new CustomFieldClient(apiClient); var newCustomField = new CreateCustomField() { FieldName = "PhoneNumber", FieldDescription = "Signer Contact details", FieldOrder = 1, BrandId = "{your brandId}", SharedField = true, FormField = new FormField() { FieldType = "TextBox", Width = 60, Height = 40, IsRequired = true, ValidationType = "NumbersOnly" } }; var response = await customFieldClient.CreateAsync(newCustomField); Console.WriteLine(response); ``` Python ```python import requests url = "https://api.boldsign.com/v1/customField/create" headers = { "Accept": "application/json;odata.metadata=minimal;odata.streaming=true", "X-API-KEY": "{your api key}", "Content-Type": "application/json;odata.metadata=minimal;odata.streaming=true" } data = { "fieldName": "PhoneNumber", "fieldDescription": "Signer Contact details", "fieldOrder": 1, "brandId": "{your brand id}", "sharedField": True, "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": True, "validationType": "NumbersOnly" } } response = requests.post(url, headers=headers, json=data) print(response.status_code) print(response.json()) # or response.text if the response is not in JSON format ``` NodeJS ```js const axios = require('axios'); const url = 'https://api.boldsign.com/v1/customField/create'; const headers = { 'Accept': 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY': '{your api key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' }; const data = { "fieldName": "PhoneNumber", "fieldDescription": "Signer Contact details", "fieldOrder": 1, "brandId": "{your brand id}", "sharedField": true, "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": true, "validationType": "NumbersOnly" } }; axios.post(url, data, { headers }) .then(response => { console.log('Status Code:', response.status); console.log('Response Data:', response.data); }) .catch(error => { console.error('Error:', error.response ? error.response.data : error.message); }); ``` PHP ```php 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY' => '{your api key}', 'Content-Type' => 'application/json;odata.metadata=minimal;odata.streaming=true' ]; $data = [ "fieldName" => "PhoneNumber", "fieldDescription" => "Signer Contact details", "fieldOrder" => 1, "brandId" => "{your brand Id}", "sharedField" => true, "formField" => [ "fieldType" => "TextBox", "width" => 60, "height" => 40, "isRequired" => true, "validationType" => "NumbersOnly" ] ]; try { $response = $client->request('POST', $url, [ 'headers' => $headers, 'json' => $data ]); echo 'Status Code: ' . $response->getStatusCode() . "\n"; echo 'Response Body: ' . $response->getBody() . "\n"; } catch (RequestException $e) { echo 'Error: ' . $e->getMessage() . "\n"; if ($e->hasResponse()) { echo 'Response Body: ' . $e->getResponse()->getBody() . "\n"; } } ``` {% /codetab %} In the provided code example, replace values for `fieldName` with the custom name of the field you want to create, `fieldOrder` with the order of the field, `brandId` with the id of the brand the custom field is associated with and the `fieldType` with the original field that the custom field is being created from. Once the above codes are excuted, a custom field is created and saved successfully in the brand. --- # File: how-to-guides\how-to-customize-the-font-of-the-form-fields.md # How to Customize Font Style for Form Fields BoldSign supports a wide range of font customization options for the form fields. Customizing the font adds a personalized touch and enhances the readability within the form fields. You can change the font style, font size, character spacing, and formatting style to create the desired font appearance. Here are some example codes you can use to customize the font of the form fields: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "value": "Customize Text", "font": "TimesRoman", "fontSize": 16, "fontHexColor": "#035efc", "isBoldFont": true, "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var textboxField = new FormField( id: "TextBox", type: FieldType.TextBox, value: "Customize Text", fontSize: 16, font: FontFamily.TimesRoman, fontHexColor: "#035efc", isBoldFont: true, isRequired: true, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { textboxField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "value": "Customize Text", "font": "TimesRoman", "fontSize": 16, "fontHexColor": "#035efc", "isBoldFont": True, "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "value": "Customize Text",\r\n "font": "TimesRoman",\r\n "fontSize": 16,\r\n "fontHexColor": "#035efc",\r\n "isBoldFont": true,\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 200,\r\n "y": 200,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} The provided code sets the `font` to `TimesRoman`, `fontSize` to `16`, `fontHexColor` to `#035efc`, and `isBoldFont` to `true`. Upon execution, the textbox value will be shown in bold, utilizing the specified font family, size and color. --- # File: how-to-guides\how-to-delete-a-document-via-BoldSign-API.md # Delete a Document with Step-by-Step Instructions BoldSign offers the ability to delete previously created documents through the API. If your organization accumulates many documents, some may become obsolete over time. You can review and remove these documents using the API. To delete a document, you first need to obtain the document ID of the document you wish to delete. You can either list your documents using the API to find this ID or retrieve it from the web app. Refer to this guide for instructions on how to list documents via API: [List documents via API](https://developers.boldsign.com/documents/list-documents/?region=us). To permanently delete the document, you need to set `deletePermanently` parameter to `true`. The default value for this parameter is `false`. By default, the document is moved to the trash when deleting the document. To delete the document via API it must be in one of the following states: completed, revoked, or declined. If the document is In Progress state, you can revoke the document using the `/v1/document/revoke` API and then you can proceed to delete it. Refer to this documentation for revoking the document via API [Revoke document](https://developers.boldsign.com/documents/revoke-document/?region=us) Here are some example codes demonstaring on how to delete a document via API: ## Code snippet {% codetab id="codetab1" %} cURL ```shell curl -X 'DELETE' \ 'https://api.boldsign.com/v1/document/delete?documentId=documentId&deletePermanently=false' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp using BoldSign.Api; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentClient = new DocumentClient(apiClient); documentClient.DeleteDocument("{Your document id}", false); ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/delete?documentId=document id&deletePermanently=false" payload={} headers = { 'X-API-KEY': '{Your API Key}' } response = requests.request("DELETE", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function DeleteDocument(){ try{ const response = await axios.delete('https://api.boldsign.com/v1/document/delete', { params: { 'documentId': '{your document id}', '&deletePermanently': 'false' }, headers: { 'X-API-KEY': '{Your API Key}' } }); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } DeleteDocument(); ``` PHP ```Php false ]); $url = "https://api.boldsign.com/v1/document/delete?documentId=documentId&deletePermanently=false"; $response = $client->request('DELETE', $url, [ 'headers' => [ 'X-API-KEY' => '{Your API Key}' ] ]); echo $response->getBody(); ?> ``` {% /codetab %} In the above examples, make sure to replace `documentId` with the ID of the document that you want to delete. Once the code is executed, the specified document will be deleted from your account. --- # File: how-to-guides\how-to-delete-custom-field.md # Delete Custom Fields Using BoldSign API When you no longer need a specific custom field, BoldSign allows you to delete it via API. To delete a custom field using the BoldSign API, you will need the `customFieldId` of the field you wish to remove. You can get the ID of the custom field by listing your custom fields using the API. Refer to this for [listing custom fields](https://developers.boldsign.com/custom-field/list-custom-field/?region=us) Below are examples of how to delete the created custom form field : ## Code snippet {% codetab %} cURL ```shell curl --location --request DELETE 'https://api.boldsign.com/v1/customField/delete?customFieldId={customFieldId}' \ --header 'Accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'X-API-KEY: {your api key}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{{apiKey}}"); var customFieldClient = new CustomFieldClient(apiClient); var customFieldId = "your-custom-field-id"; var deleteResponse = customFieldClient.DeleteCustomField(customFieldId); Console.WriteLine(deleteResponse); ``` Python ```python import requests url = "https://api.boldsign.com/v1/customField/delete?customFieldId=" payload = {} headers = { 'Accept': 'application/json;odata.metadata=minimal;odata.streaming=true', "X-API-KEY": "{your api key}" } response = requests.request("DELETE", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); let config = { method: 'delete', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/customField/delete?customFieldId=', headers: { 'Accept': 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY': '{your api key}' } }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false, ]); $apiKey = 'your_actual_api_key'; $customFieldId = 'your_custom_field_id'; $headers = [ 'Accept' => 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY' => $apiKey, ]; $requestUri = "https://api.boldsign.com/v1/customField/delete?customFieldId={$customFieldId}"; try { $request = new \GuzzleHttp\Psr7\Request('DELETE', $requestUri, $headers); $response = $client->sendAsync($request)->wait(); echo $response->getBody(); } catch (RequestException $e) { echo 'Request failed: ' . $e->getMessage(); } ``` {% /codetab %} In the provided code example, make sure to replace values for `customFieldId` with the ID of the custom field that you want to delete. Once the codes are executed, the provided custom field will be permanently deleted from your account. --- # File: how-to-guides\how-to-disable-all-email-notifications-when-sending-document-from-template.md # Disable Email Notifications for Template Sends If you want to manage the signature process within your application and prevent email notifications from being sent to signers, BoldSign allows you to disable email notifications when sending documents from template using the API. This ensures that recipients will not receive any email communication associated with the signing process. ## Create a template in BoldSign's web app Templates are created in the same way as regular documents, but instead of associating signature fields with people, we simply associate fields with roles. Create a template in BoldSign's web app. See [How to Create a Template in the BoldSign Web App](https://support.boldsign.com/en-US/kb/article/31/create-template) for instructions. When you need to send the same contracts out for signature to different groups of people repeatedly, you can use templates to save time. ## Disable email notifications when sending document from template This section will explain the process of disabling email notifications when sending a document from the template. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=4fe17627-xxxx-41ff-xxxx-0af80fd77740' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "roles": [ { "roleIndex": 1, "signerName": "David", "signerEmail": "david@cubeflakes.com", "formFields": [ { "id": "Sign", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 100, "height": 50 }, "isRequired": true } ], "locale": "EN" } ], "disableEmails": true, }' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var templateRole = new Roles( roleSignerIndex:1, roleSignerName:"David", roleSignerEmailAddress:"david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "4fe17627-xxxx-41ff-xxxx-0af80fd77740", Roles = roles, DisableEmails=true }; var documentCreated = await templateClient.SendUsingTemplateAsync(sendForSignFromTemplate).ConfigureAwait(false); Console.WriteLine(documentCreated.DocumentId.ToString()); ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/send?templateId=4fe17627-xxxx-41ff-xxxx-0af80fd77740" payload = { "roles": [ { "roleIndex": 1, "signerName": "David", "signerEmail": "david@cubeflakes.com", "formFields": [ { "id": "sign", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 100, "height": 50 }, "isRequired": True } ], } ], "disableEmails":True, } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = axios.post( 'https://api.boldsign.com/v1/template/send?templateId=4fe17627-xxxx-41ff-xxxx-0af80fd77740', { 'roles': [ { 'roleIndex': 1, 'signerName': 'David', 'signerEmail': 'david@cubeflakes.com', 'formFields': [ { 'id': 'sign', 'fieldType': 'Signature', 'pageNumber': 1, 'bounds': { 'x': 100, 'y': 100, 'width': 100, 'height': 50 }, 'isRequired': true } ], } ], 'disableEmails': true, }, { headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ).then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, update the `templateId` with the ID of the template you created earlier. Configure the remaining fields according to your requirements. To disable email notifications, set the `DisableEmails` field as `true`. After executing the above code, the document will be created, and an email notifications will not be sent to the signer. With email notifications disabled, you can proceed to obtain the signer's signature within your application using embedded signing. You can embed the signing request in your application to facilitate the signature process without sending email notifications. For detailed steps on how to integrate embedded signing into your application, refer to this article [Integrate Embedded Signing in your application](https://developers.boldsign.com/how-to-guides/integrate-embedded-signing-in-your-website-or-application/?region=us). --- # File: how-to-guides\how-to-edit-custom-fields.md # Update Custom Fields via API in Documents Editing a custom field in the BoldSign API allows you to update the properties of an existing custom field associated with your brand. To edit a custom field using the BoldSign API, you will need to provide the updated field details, including the field's `customFieldId` , `brandId` and the new values for the properties you want to change. Users can execute partial updates to a custom field by specifying only the fields they intend to modify. The API will modify the provided fields, leaving the remaining unchanged. However, if you want to edit values under the form field section, e.g for updating the `fieldType` you can specify as: "formField": {"fieldType": "CheckBox",} since it is a nested property. Below are examples of how to edit field name of the created custom form field: ## Code snippet {% codetab %} cURL ```shell curl -X POST \ 'https://api.boldsign.com/v1/customField/edit?customFieldId={customFieldId}' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your api key}' \ -H 'Content-Type: application/json' \ -d '{ "fieldName": "PhoneNumber", "brandId": "{your brand Id}", "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": true, "validationType": "NumbersOnly" } }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "API-KEY"); var customFieldClient = new CustomFieldClient(apiClient); var updateCustomField = new UpdateCustomField() { CustomFieldId = "{customFieldId}", FieldName = "MobileNumber", BrandId = "{your brandId}", formField: { fieldType: "TextBox", width: 60, height: 40, isRequired: true, validationType: "NumbersOnly" } }; var response = await customFieldClient.EditAsync(updateCustomField); Console.WriteLine(response); ``` Python ```python import requests url = "https://api.boldsign.com/v1/customField/edit?customFieldId={customField Id}" headers = { "Accept": "application/json;odata.metadata=minimal;odata.streaming=true", "X-API-KEY": "{your api key}", "Content-Type": "application/json;odata.metadata=minimal;odata.streaming=true" } data = { "fieldName": "MobileNumber", "brandId": "{your brand id}", "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": True, "validationType": "NumbersOnly" } } response = requests.post(url, headers=headers, json=data) print(response.status_code) print(response.json()) # or response.text if the response is not in JSON format ``` NodeJS ```js const axios = require('axios'); const url = 'https://api.boldsign.com/v1/customField/edit?customFieldId={customFieldId}'; const headers = { 'Accept': 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY': '{your api key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' }; const data = { "fieldName": "MobileNumber", "brandId": "{your brand id}", "formField": { "fieldType": "TextBox", "width": 60, "height": 40, "isRequired": true, "validationType": "NumbersOnly" } }; axios.post(url, data, { headers }) .then(response => { console.log('Status Code:', response.status); console.log('Response Data:', response.data); }) .catch(error => { console.error('Error:', error.response ? error.response.data : error.message); }); ``` PHP ```php false, ]); $url = 'https://api.boldsign.com/v1/customField/edit?customFieldId={customFieldId}'; $headers = [ 'Accept' => 'application/json;odata.metadata=minimal;odata.streaming=true', 'X-API-KEY' => '{your api key}', 'Content-Type' => 'application/json;odata.metadata=minimal;odata.streaming=true' ]; $data = [ "fieldName" => "MobileNumber", "brandId" => "{your brand Id}", "formField" => [ "fieldType" => "TextBox", "width" => 60, "height" => 40, "isRequired" => true, "validationType" => "NumbersOnly" ] ]; try { $response = $client->request('POST', $url, [ 'headers' => $headers, 'json' => $data ]); echo 'Status Code: ' . $response->getStatusCode() . "\n"; echo 'Response Body: ' . $response->getBody() . "\n"; } catch (RequestException $e) { echo 'Error: ' . $e->getMessage() . "\n"; if ($e->hasResponse()) { echo 'Response Body: ' . $e->getResponse()->getBody() . "\n"; } } ``` {% /codetab %} In the provided code example, provide the custom field values that you want to edit such as , such as `fieldName`, `fieldDescription`, `fieldOrder` and `formField` update with the new values. Replace the `CustomId` and `brandId` with your own values. When the above codes are executed, the custom field will be updated with the provided details. --- # File: how-to-guides\how-to-get-identity-verification-report.md # How to Get Identity Verification Report The Identity Verification report provides a summary of the information extracted from the document uploaded by the signer such as the verification status, verification date and the documents uploaded. This report is generated following the completion of the verification process, whether it is successful or unsuccessful. To generate a verification report, the sender must provide the `documentId` of the document for which the report is to be generated and the `emailId` of the user for whom the report is requested. If SMS delivery mode was used, the sender can specify the `documentId` along with the country code and phone number values. **Note**:Access to this report is restricted to the sender of the document, ensuring that sensitive verification details are only available to those who initiated the verification request. Below are examples of how to generate verification report via API: ## Code snippet {% codetab %} cURL ```shell curl --location 'https://api.boldsign.com/v1-beta/identityVerification/report?documentId={document id}' \ --header 'accept: application/json' \ -H 'X-API-KEY: {your api key}' \ --header 'Content-Type: application/json' \ --data-raw '{ "emailId": "alexgayle@cubeflakes.com", "order": 1 }' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your-api-key}"); var idVerificationClient = new IdVerificationClient(apiClient); var documentId = "{document id}"; var verificationReportRequest = new VerificationReportRequest() { EmailId = "alexgayle@cubeflakes.com", Order = 1, }; var idVerificationReport = idVerificationClient.GetReport(documentId, verificationReportRequest); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1-beta/identityVerification/report?documentId={document id}" payload = { "emailId": "alexgayle@cubeflakes.com", "order": 1 } headers = { 'accept': 'application/json', 'X-API-KEY': '{your-api-key}', 'Content-Type': 'application/json' } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = "https://api.boldsign.com/v1-beta/identityVerification/report?documentId={document id}"; const payload = { emailId: "alexgayle@cubeflakes.com", order: 1 }; const headers = { 'Accept': 'application/json', 'X-API-KEY': '{your-api-key}', 'Content-Type': 'application/json' }; axios.post(url, payload, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error.response.data); }); ``` PHP ```php 'alexgayle@cubeflakes.com', 'order' => 1 ]; $headers = [ 'Accept' => 'application/json', 'X-API-KEY' => '{your-api-key}', 'Content-Type' => 'application/json' ]; $client = new GuzzleHttp\Client([ 'verify' => false, ]); $response = $client->post($url, [ 'headers' => $headers, 'json' => $payload ]); echo $response->getBody()->getContents(); ``` {% /codetab %} In the provided code example, make sure to replace values for `documentId` with the ID of the document that you want to fetch the report from. Additionally, provide the `emailId` value with the email address of the user for whom the report is to be fetched. If signing order was enabled, you can specify the `order` value to differentiate which order you are getting the report from. Once the codes are executed, verifcation report is generated with verification status, verification date and the document used for verification. --- # File: how-to-guides\how-to-hide-standard-form-fields-using-branding.md # How to Hide Standard Fields Using Branding BoldSign supports hiding standard form fields using branding, allowing you to display custom form fields instead. This article will guide you on how to hide standard form fields using branding via the API. You can hide the standard form fields by setting `ShowBuiltInFormFields` as `false` using branding via API. Here are a few code examples that demonstrate how to hide standard form fields. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/brand/edit?brandId=8b115d45-0xxc-4d69-axxc-cfdbb308e095' \ -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ShowBuiltInFormFields=false' \ -F 'CombineAuditTrail=false' \ -F 'ShowSharedCustomFields=true' \ -F 'EmailDisplayName={Your email display name}' \ -F 'BrandLogo=@{Your file path}' \ -F 'BrandName={Your brand name}' \ -F 'IsDefault=false' \ -F 'CanHideTagLine=true' \ -F 'AllowCustomFieldCreation=false' \ ``` Python ```python import requests url = "https://api.boldsign.com/v1/brand/edit?brandId=8b115d45-0xxc-4d69-axxc-cfdbb308e095" payload={ 'brandName': '{Your Brand Name}', 'ShowBuiltInFormField':'False', 'AllowCustomFieldCreation':'False', 'ShowSharedCustomFields':True, 'emailDisplayName': '{Your email display name}', 'isDefault': 'false', 'canHideTagLine': 'true', 'combineAuditTrail': 'false' files=[ ('brandLogo',('file',open('filepath','rb'),'application/jpg')) ] headers = { 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('brandName', '{Your brand name}'); form.append('brandLogo', fs.createReadStream('{your file path}')); form.append('emailDisplayName', '{Your email display name}'); form.append('isDefault', 'false'); form.append('canHideTagLine', 'true'); form.append('combineAuditTrail', 'false'); form.append('ShowBuiltInFormFields', 'false'); form.append('ShowSharedCustomFields', 'true'); form.append('AllowCustomFieldCreation', 'false'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/brand/edit', form, { params: { 'brandId': '8b115d45-095c-4xx9-axxc-cfdbb308e095' }, headers: { ...form.getHeaders(), 'X-API-KEY': '{Your API Key}' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } GetData(); ``` {% /codetab %} After executing the code, you can customize the form fields by hiding the standard form fields and displaying only custom fields to the signers through branding. --- # File: how-to-guides\how-to-list-custom-fields.md # How to Retrieve List of Custom Fields BoldSign allows you to retrieve a complete list of custom fields linked to a specific brand using the brand ID via API. The list provides a detailed view of the custom fields within the brand, including information such as `fieldID,` `name,` `description` and `order,` of the form fields. Below are examples codes of how to get a list of the created custom in a particluar brand : ## Code snippet {% codetab %} cURL ```shell curl --location 'https://api.boldsign.com/v1/customField/list?brandId={brandId}' \ --header 'Accept: application/json' \ -H 'X-API-KEY: {your api key}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{api key}"); var customFieldClient = new CustomFieldClient(apiClient); var brandId = "{brand id}"; var customFields = await customFieldClient.GetBrandBasedCustomFieldsAsync(brandId); //var customField Console.WriteLine(customFields); ``` Python ```python import requests url = "https://api.boldsign.com/v1/customField/list?brandId={brandId}" payload = {} headers = { 'Accept': 'application/json', "X-API-KEY": "{your api key}" } response = requests.request("DELETE", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); let config = { method: 'delete', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/customField/list?brandId={brandId}', headers: { 'Accept': 'application/json', 'X-API-KEY': '{your api key}' } }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false, ]); $apiKey = 'your_actual_api_key'; $customFieldId = 'your_custom_field_id'; $headers = [ 'Accept': 'application/json', 'X-API-KEY' => $apiKey, ]; $request = new Request('GET', 'https://api.boldsign.com/v1/customField/list?brandId={brandId}', $headers); $res = $client->sendAsync($request)->wait(); echo $res->getBody(); ``` {% /codetab %} In the provided code example, make sure to replace values for `brandId` with the ID of the brand you want to list the custom fields from. Once the codes are executed, all the custom fields under the specified brand will be listed. --- # File: how-to-guides\how-to-prefill-image-field-when-sending-document-from-template.md # Prefill Image Field When Sending from a Template BoldSign allows you to prefill values for existing form fields when sending documents from a template. This article provides a guide on how to prefill values for image fields. Templates are pre-designed layouts that streamline the creation of new documents. They offer a consistent structure and format, saving time, especially when sending the same contracts to multiple recipients. For more information, please refer to the [Create Template](https://developers.boldsign.com/template/create-template/?region=us) article. Once you got a template ID, you can prefill the values for existing form fields and send document from the template.To prefill values for existing form fields in a template, you need to use the `Properties` API to retrieve the form field IDs and assign values to these fields. For more details, read about the [Template Properties API](https://developers.boldsign.com/template/template-details/?region=us). Once you have the IDs for the image field, you can assign the image form field ID to the `existingFormFields` ID and assign the value which image field you want to prefill the value. You can provide the image field in base64 format like `data:application/{{fileType}};base64,{{content}}`. Here is an example demonstrating how to prefill image field values when sending a document from a template: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=908625d5-xxxx-xxxx-8849-54e31ee7a6ed' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Sample document", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "signerType": "Signer", "signerRole": "Manager", "existingFormFields": [ { "id": "Image1", "value":"data:image/png;base64,iVBORw0KGgoAAAANS..." }, ], "locale": "EN" } ], }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var existingFormFieldCollections = new List { new ExistingFormField( id: "Image1", value: "data:image/png;base64,iVBORw0K..." ) }; var templateRole = new Roles( roleSignerName:"Richard", roleSignerEmailAddress:"richards@cuberflakes.com", roleSignerIndex:1, existingFormFields:existingFormFieldCollections, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "908625d5-xxxx-xxxx-8849-54e31ee7a6ed", Roles = roles, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/send?templateId=d6bad813-xxxx-xxxx-8c9e-e91a96c06392" payload = { "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "existingFormFields": [ { "id": "Image1", "value": "data:image/jpeg;base64,9j4AAQSkZJ.." } ] } ] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'Richard', 'signerEmail': 'richards@cuberflakes.com', 'existingFormFields': [ { 'id': 'Image1', 'value': 'data:image/jpeg;base64,9j4AAQSk...' } ] }, ], title: "Simple document", message: "Kindly review and sign this.", }, { params: { 'templateId': 'd6bad813-xxxx-xxxx-8c9e-e91a96c06392', }, headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } GetData(); ``` {% /codetab %} In the provided code examples, make sure to replace the `templateId` with the actual ID of the template you created. Also, update the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document. Once the above code is executed, the image form field will be successfully prefilled with the provided image. --- # File: how-to-guides\how-to-prefill-label-field-when-sending-document-from-template.md # Prefill Label Fields When Sending from a Template BoldSign allows you to prefill values for existing form fields when sending documents from a template. This article provides a guide on how to prefill values for label fields. The label fields are common fields that will be visible to all the signers and cannot be edited by the signers. Templates are pre-designed layouts that streamline the creation of new documents. They offer a consistent structure and format, saving time, especially when sending the same contracts to multiple recipients. For more information, please refer to the [Create Template](https://developers.boldsign.com/template/create-template/?region=us) article. Once the template is created, you can get the template ID of the template. Then you can prefill the values for existing form fields and send document from the template. To prefill values for existing form fields in a template, you need to use the `Properties` API to retrieve the form field IDs and assign values to these fields. For more details, read about the [Template Properties API](https://developers.boldsign.com/template/template-details/?region=us). Once you have the IDs for the label field, you can assign the label form field ID to the `existingFormFields` ID and assign the value which label form field you want to prefill the value. Here is an example demonstrating how to prefill label field values when sending a document from a template: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=6357f511-xxxx-xxxx-8235-7a43be83cffc' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Sample document", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "privateMessage": "Please check and sign the document.", "signerType": "Signer", "signerRole": "Manager", "existingFormFields": [ { "id": "State", "value": "North Carolina" }, ], "locale": "EN" } ], "disableEmails": false, "disableSMS": false }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var existingFormFieldCollections = new List { new ExistingFormField( id: "State", value: "North Carolina" ) }; var templateRole = new Roles( roleSignerName:"Richard", roleSignerEmailAddress:"richards@cuberflakes.com", roleSignerIndex:1, existingFormFields:existingFormFieldCollections, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "6357f511-xxxx-xxxx-8235-7a43be83cffc", Roles = roles, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/send?templateId=6357f511-xxxx-xxxx-8235-7a43be83cffc" payload = { "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "existingFormFields": [ { "id": "State", "value": "North Carolina" } ] } ] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'Richard', 'signerEmail': 'richards@cuberflakes.com', 'existingFormFields': [ { 'id': 'State', 'value': 'North Carolina' } ] }, ], title: "Simple document", message: "Kindly review and sign this.", }, { params: { 'templateId': '6357f511-xxxx-xxxx-8235-7a43be83cffc', }, headers: { 'accept': 'application/json', 'X-API-KEY': '{your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } GetData(); ``` {% /codetab %} In the provided code examples, make sure to replace the `templateId` with the actual ID of the template you created. Also, update the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document. Once the above code is executed, the label form field will be successfully prefilled with the provided values. --- # File: how-to-guides\how-to-prefill-the-image-field-after-sending-document.md # Prefill Image Fields After Sending a Document BoldSign allows you to prefill values for existing form fields after sending document for signature. This article provides a guide on how to prefill the image form fields. To prefill values for existing form fields in a document, you need to use the `Properties` API to retrieve the form field IDs and assign values to these fields. For more details, read about the [Document Properties API](https://developers.boldsign.com/documents/document-details-and-status/?region=us). Once you have the IDs for the image fields and assign the value to which image field you want to prefill the value.You can provide the image field in base64 format like `data:application/{{fileType}};base64,{{content}}`. Here is an example demonstrating how to prefill image field after sending a document for e-Signature: ## Code snippet {% codetab %} cURL ```shell curl --location --request PATCH ' https://api.boldsign.com/v1-beta/document/prefillFields?documentId=73742d3f-xxxx-xxxx-8481-01dca586ed14' \ --header 'X-API-KEY: {Your API Key}' \ --header 'Content-Type: application/json' \ --data-raw '{ "fields": [ { "id": "Image1", "value": "data:image/png;base64,iVBORw0KGgoAAAANS..." }, ] }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Api.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentClient = new DocumentClient(apiClient); var documentId = "d2566905-xxxx-xxxx-b38c-da0fc387971a"; var prefillFieldRequest = new PrefillFieldRequest(documentId) { Fields = new List() { new PrefillField() { Id = "Image1", Value = "data:image/png;base64,iVBORw0KGgoAAAANSU..." }, }, }; await documentClient.PrefillFieldsAsync(prefillFieldRequest); ``` Python ```python import requests url = 'https://api.boldsign.com/v1-beta/document/prefillFields' headers = { 'Content-Type': 'application/json', 'X-API-KEY': '{Your API Key}' } data = { "fields": [ { "id": "Image1", "value": "data:image/png;base64,iVBORw0KG..." } ] } document_id = 'cca1770c-xxxx-xxxx-b0b6-f554591de7b4' params = {'documentId': document_id} response = requests.patch(url, headers=headers, json=data, params=params) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = 'https://api.boldsign.com/v1-beta/document/prefillFields'; const apiKey = '{Your API Key}'; const documentId = '2d60c66a-xxxx-xxxx-904b-f8d0c4f02241'; const headers = { 'Content-Type': 'application/json', 'X-API-KEY': apiKey }; const data = { fields: [ { id: 'Image1', value: 'data:image/png;base64,iVBORw0KG...', } ] }; axios.patch(url, data, { headers, params: { documentId } }) .then(response => { console.log(response); }) .catch(error => { console.error('Error:', error); }); ``` {% /codetab %} In the provided code examples, make sure to replace the `documentId` with the actual ID of the document you created. Once the above code is executed, the image form field will be successfully prefilled with the provided image in the document. --- # File: how-to-guides\how-to-prefill-values-for-radio-button-after-sending-document-for-signature.md # Prefill Radio Fields After Sending a Document BoldSign allows you to prefill values for existing form fields after sending document for e-Signature. However, it's important to note that prefilling form fields is not allowed after the document has been signed by the signer.This article provides a guide on how to prefill values for radio button fields. To prefill values for existing form fields in a document, you need to use the Properties API to retrieve the form field IDs and assign values to these fields. For more details, read about the [Document Properties API](https://developers.boldsign.com/documents/document-details-and-status/?region=us). Once you have the IDs for the radio button and assign the value to which radio button you want to prefill the value. Here is an example demonstrating how to prefill radio button values after sending a document for e-Signature: ## Code snippet {% codetab %} cURL ```shell curl --location --request PATCH ' https://api.boldsign.com/v1-beta/document/prefillFields?documentId=2d60c66a-xxxx-xxxx-904b-f8d0c4f02241' \ --header 'X-API-KEY: {Your API Key}' \ --header 'Content-Type: application/json' \ --data-raw '{ "fields": [ { "id": "RadioGroupChild1", "value": "ON" }, { "id": "RadioGroupChild2", "value": "OFF" } ] }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Api.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var documentClient = new DocumentClient(apiClient); var documentId = "2d60c66a-xxxx-xxxx-904b-f8d0c4f02241"; var prefillFieldRequest = new PrefillFieldRequest(documentId) { Fields = new List() { new PrefillField() { Id = "RadioGroupChild1", Value = "ON" }, new PrefillField() { Id = "RadioGroupChild2", Value= "OFF" } }, }; await documentClient.PrefillFieldsAsync(prefillFieldRequest); ``` Python ```python import requests url = 'https://api.boldsign.com/v1-beta/document/prefillFields' headers = { 'Content-Type': 'application/json', 'X-API-KEY': '{Your API Key}' } data = { "fields": [ { "id": "RadioGroupChild1", "value": "ON" }, { "id": "RadioGroupChild2", "value": "OFF" } ] } document_id = '2d60c66a-xxxx-xxxx-904b-f8d0c4f02241' params = {'documentId': document_id} response = requests.patch(url, headers=headers, json=data, params=params) print(response.text) ``` NodeJS ```js const axios = require('axios'); const url = 'https://api.boldsign.com/v1-beta/document/prefillFields'; const apiKey = '{Your API Key}'; const documentId = '2d60c66a-xxxx-xxxx-904b-f8d0c4f02241'; const headers = { 'Content-Type': 'application/json', 'X-API-KEY': apiKey }; const data = { fields: [ { id: 'RadioGroupChild1', value: 'ON' }, { id: 'RadioGroupChild2', value: 'OFF' } ] }; axios.patch(url, data, { headers, params: { documentId } }) .then(response => { console.log(response); }) .catch(error => { console.error('Error:', error); }); ``` {% /codetab %} In the provided code examples, make sure to replace the `documentId` with the actual ID of the document you created. Once the above code is executed, the radio button form field will be successfully prefilled with the provided values in the document. --- # File: how-to-guides\how-to-prefill-values-for-radio-button-while-sending-documents-from-template.md # Prefill Radio Buttons from Templates During Send BoldSign allows you to prefill values for existing form fields when sending documents from a template. This article provides a guide on how to prefill values for radio button fields. Templates are pre-designed layouts that streamline the process of creating new documents. By offering a consistent structure and format, they help save time, especially when you frequently send the same contracts for signatures to different recipients. Once a template is configured, sending contracts based on it takes less than a minute. For more information, please refer to the [Create Template](https://developers.boldsign.com/template/create-template/?region=us) article. Once you created a template, you can prefill the values for existing form fields and send document from the template. To prefill values for existing form fields in a template, you need to use the `Properties` API to retrieve the form field IDs and assign values to these fields. For more details, read about the [Template Properties API](https://developers.boldsign.com/template/template-details/?region=us). Once you have the IDs for the radio button group and radio group child elements, you can assign the radio group ID to the `existingFormFields` ID and assign the value as radio button child label which radio button you want to prefill the value. Here is an example demonstrating how to prefill radio button values when sending a document from a template: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=6357f511-xxxx-xxxx-8235-7a43be83cffc' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Sample document", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "signerType": "Signer", "signerRole": "Manager", "existingFormFields": [ { "id": "RadioGroup1", "value": "RadioChild2" }, { "id": "RadioGroup2", "value": "RadioChild1" } ], "locale": "EN" } ], }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var existingFormFieldCollections = new List { new ExistingFormField( id: "RadioGroup1", value: "RadioChild2" ), new ExistingFormField( id: "RadioGroup2", value: "RadioChild1" ), }; var templateRole = new Roles( roleSignerName:"Richard", roleSignerEmailAddress:"richards@cuberflakes.com", roleSignerIndex:1, existingFormFields:existingFormFieldCollections, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "6357f511-xxxx-xxxx-8235-7a43be83cffc", Roles = roles, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/send?templateId=6357f511-xxxx-xxxx-8235-7a43be83cffc" payload = { "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richards@cuberflakes.com", "existingFormFields": [ { "id": "RadioGroup1", "value": "RadioChild2" }, { "id": "RadioGroup2", "value": "RadioChild1" } ] } ] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'Richard', 'signerEmail': 'richards@cuberflakes.com', 'existingFormFields': [ { 'id': "RadioGroup1", 'value': "RadioChild2" }, { 'id': "RadioGroup2", 'value': "RadioChild1" } ] }, ], title: "Simple document", message: "Kindly review and sign this.", }, { params: { 'templateId': '6357f511-xxxx-xxxx-8235-7a43be83cffc', }, headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; // Propagate the error } } GetData(); ``` {% /codetab %} In the provided code examples, make sure to replace the `templateId` with the actual ID of the template you created. Also, update the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document. Once the above code is executed, the radio button form field will be successfully prefilled with the provided values. --- # File: how-to-guides\how-to-provide-access-code-authentication-for-document.md # Authenticate Signers with Access Codes Authentication is the process of verifying the identity of a user. It adds an additional layer of security to the document signing process. BoldSign supports Email OTP, SMS OTP, and access code authentication to verify the signers. This guide will demonstrate how to mandate an access code verification from signers to validate their authority to sign the document. The access code will be used when the sender wants to use a specific code to verify the signer. The access code must be communicated personally to the signer beforehand. Here are some code examples which you can use to provide access code authentication for a document. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "authenticationType": "AccessCode", "authenticationCode": "1234", "formFields": [ { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z", "timeFormat": "None" } } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var EditableDateField = new FormField( id: "EditableDate", isRequired: true, type: FieldType.EditableDate, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25), editableDateFieldSettings: new EditableDateFieldSettings(dateFormat:"dd/MM/yyyy", minDate: DateTime.Now, maxDate: DateTime.Now.AddDays(10))); var formFieldCollections = new List() { EditableDateField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, authenticationType: AuthenticationType.AccessCode, authenticationCode: "1234", locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "authenticationType": "AccessCode", "authenticationCode": "1234", "formFields": [ { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z" } } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const fs = require('fs'); const FormData = require('form-data'); let formData = new FormData(); // Append Signers as an object, not a string formData.append('Signers', JSON.stringify({ name: "hanky", emailAddress: "hankyWhites@gmail.com", signerType: "Signer", signerRole: "Signer", authenticationType: "AccessCode", authenticationCode: "1234", formFields: [ { id: "EditableDate", name: "EditableDate", fieldType: "EditableDate", pageNumber: 1, bounds: { x: 100, y: 100, width: 125, height: 25 }, editableDateFieldSettings: { dateFormat: "dd/MM/yyyy", minDate: "2023-07-01T18:18:08.567Z", maxDate: "2023-07-31T18:18:08.567Z" }, isRequired: true } ], locale: "EN" })); // Append the file using a specific filename for the 'Files' property formData.append('Files', fs.createReadStream("{Your file path}"), { filename: '{Your file name}' }); formData.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'multipart/form-data', ...formData.getHeaders() }, data: formData, }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.error(error); }); ``` {% /codetab %} In the above code examples set the `authenticationType` to `AccessCode` and provide a unique access code (e.g., "1234") in the `authenticationCode` property. By executing any one of the above code examples, document will be sent to the signers. Signer can start the signing process after giving the access code that you have provided in the `authenticationCode`. --- # File: how-to-guides\how-to-provide-background-color-for-label-fields-while-sending-document.md # Add Background Color to Label Fields Easily BoldSign allows you to set a background color for label fields by using the `BackgroundHexColor` API when sending a document for signature. This article provides a guide on how to set a background color for label fields when sending a document for signature using the BoldSign API. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "Richard", "emailAddress": "richard@boldsign.dev", "formFields": [ { "id": "sign", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 20 }, "isRequired": true }, { "id": "label1", "fieldType": "Label", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 200, "height": 20 }, "isRequired": true, "value": "Sample", "backgroundHexColor": "#00FFFF" } ], "locale": "EN" }' \ -F 'Files=@{Your File Path}' \ -F 'Title=Sample document' \ ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "Your API Key"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type:FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var labelField = new FormField( id: "label", isRequired: true, value:"Sample", type: FieldType.Label, pageNumber: 1, bounds: new Rectangle(x: 200, y: 400, width: 100, height: 50)); labelField.BackgroundHexColor = "#FF00FF"; var formFieldCollections = new List() { signatureField, labelField }; var signer = new DocumentSigner( signerName: "Richard", signerType: SignerType.Signer, signerEmail: "richard@boldsign.dev", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Richard", "emailAddress": "richard@boldsign.dev", "signerType": "Signer", "formFields": [ { "id": "Sign1", "name": "Sign1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "isRequired": True }, { "id": "Label1", "name": "Label1", "fieldType": "Label", "value":"Sample", "pageNumber": 1, "bounds": { "x": 150, "y": 250, "width": 200, "height": 25 }, "backgroundHexColor": "#00FFFF" } ], "locale": "EN" } payload = { 'Message': 'Please sign this.', 'Signers': json.dumps(signer_data), 'Title': 'Agreement', } files=[ ('Files',('file',open('{Your file path}','rb'),'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const fs = require('fs'); const FormData = require('form-data'); const url = "https://api.boldsign.com/v1/document/send"; const signerData = { name: "Richard", emailAddress: "richard@boldsign.dev", signerType: "Signer", formFields: [ { id: "Sign1", name: "Sign1", fieldType: "Signature", pageNumber: 1, bounds: { x: 50, y: 50, width: 200, height: 25 }, isRequired: true }, { id: "Label1", name: "Label1", fieldType: "Label", value:"Sample", pageNumber: 1, bounds: { x: 150, y: 250, width: 200, height: 25 }, isRequired: true, backgroundHexColor: "#00FFFF" } ], locale: "EN" }; const formData = new FormData(); formData.append('Message', 'Please sign this.'); formData.append('Signers', JSON.stringify(signerData)); formData.append('Title', 'Agreement'); formData.append('Files', fs.createReadStream('{Your file path}'), 'application/pdf'); const headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', ...formData.getHeaders() }; axios.post(url, formData, { headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` {% /codetab %} In the provided code examples, make sure to update the `SignerEmail` and `SignerName` properties with the email and name of the signer you wish to send the document to, and replace the filepath with the actual path to your PDF file. Once the code is executed, the document will be sent for signature with label fields, including background color. --- # File: how-to-guides\how-to-provide-datasync-property-for-form-fields.md # How to Sync Form Field Values Using Datasync BoldSign offers support for linking multiple form fields, enabling the synchronization of values across these fields. This functionality ensures that when data is entered into one field, it is automatically populated in all linked fields. This streamlines the form-filling process, enhancing efficiency and accuracy for users. ## Supported Form Fields Data sync tags are presently compatible with the following types of form fields: - Textbox - Label - Checkbox - Dropdown - Image - Editable Date ## Creating Data Sync Tags To synchronize the values of the form fields, simply input the same value into the dataSyncTag property of each form field. For instance, if you wish to link two textboxes, assign the identical value (e.g., "1") to the dataSyncTag property of both textboxes. When a user inputs data into one of the linked fields, the data will be automatically populated in all the other linked fields. This streamlines the user experience, requiring them to enter data only once, which will then be automatically filled in for them in all the other linked fields. Here are example codes demonstrating how to achieve this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "value": "Default Value", "dataSyncTag": "1" }, { "id": "TextBox1", "name": "TextBox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "dataSyncTag": "1" } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "TextBox", isRequired: true, value: "Default value", dataSyncTag: "1", type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var TextBoxField1 = new FormField( id: "TextBox1", isRequired: true, dataSyncTag: "1", type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField, TextBoxField1 }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Files = filesToUpload, Title = "Sample Document" }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "value": "Default value", "dataSyncTag": "1" }, { "id": "TextBox1", "name": "TextBox1", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "dataSyncTag": "1" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "value": "Default Value",\r\n "dataSyncTag": "1",\r\n "isRequired": true\r\n}\r\n, \r\n {\r\n "id": "TextBox1",\r\n "name": "TextBox1",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 200,\r\n "y": 200,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "dataSyncTag": "1",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the provided example, when the same value, such as "1," is entered into the `dataSyncTag` property, it enables users to input data once, which will then be automatically populated into another textbox field. When the code is executed, a document will be generated, synchronizing both textbox form field values. This ensures that changes made in one textbox are reflected in the other, facilitating data consistency and efficiency in document generation. --- # File: how-to-guides\how-to-provide-readonly-property-for-form-fields.md # How to Set Read-Only Property on Form Fields BoldSign allows you to create the read-only form fields, ensuring they are non-editable to signers. This guide will go through the process of setting read-only property to the supported form fields using BoldSign API. ## Send a document to the signer with readonly property: You can set the `isReadOnly` property to `true` for each field that should be non-editable to signers. The read-only option is supported only for the below fields: - TextBox - CheckBox - RadioButton - Name Field - Editable Date - Image Field {% highlight %}When setting the `isReadOnly` property to `true`, ensure that the prefilled value is also set; otherwise, an error message will be thrown. {% /highlight %} DinakaranGSF3536 marked this conversation as resolved. Here are example codes you can use to set the form fields as read-only: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "value": "Prefilled Value", "isReadOnly": true } ], "locale": "EN" }' \ -F 'Files={your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "sign", isRequired: true, isReadOnly: true, value: "Prefilled Value", type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField }; var signer = new DocumentSigner( name: "David", emailAddress: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.FR); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { DisableEmails = true, Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "value": "prefilled Value", "isReadOnly": True } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isReadOnly": true,\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Title', "Sample Document"); data.append('Files', fs.createReadStream('{Your file path}')); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, the prefilled value should be given when you set the `isReadOnly` property to `true` for each field that should be non-editable by signers. By executing any one of the above code examples, the document will be sent for signature and the read-only fields cannot be edited by the signers. --- # File: how-to-guides\how-to-provide-required-property-for-form-fields.md # How to Set Required Fields for Signers BoldSign supports signers to add form fields during the signing process. Signers must fill in these fields before they can complete signing the document. This ensures that all necessary information is collected and helps to avoid incomplete signatures. ## Send a document to the signer with required property: You can set the `isRequired` property to `true` for each field should be filled by signers. Here are example codes you can use to set the required for form fields: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Invitation form"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "sign", isRequired: true, type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Title = "Sample Document", HideDocumentId = false, Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Title', "Sample Document"); data.append('Files', fs.createReadStream('{Your file path}')); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, when you set the `isRequired` property to `true` for each field should be filled before they can sign the document. By executing any one of the above code examples, the document will be sent for signature and signers won't be able to submit it without filling in the required values. --- # File: how-to-guides\how-to-provide-textdirection-property-for-textbox-fields.md # How to Set Text Direction for Textbox Fields BoldSign API allows you to set text directions such as RTL (Right-to-Left) or LTR (Left-to-Right) for text boxes. Setting the `textDirection` property as `RTL` for textbox form fields is essential when dealing with languages that follow RTL script orientation. By default, the `textDirection` property is set to `LTR`. ## RTL and LTR differences: - **Right-to-Left (RTL)**: Text flows from right to left, standard for languages such as Arabic, Hebrew, Persian, etc. - **Left-to-Right (LTR)**: Text flows from left to right, standard for languages such as English, French, Spanish, etc. Here are example codes you can use to do set text direction for text boxes: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "textDirection": "RTL" } ], "locale": "EN" }' \ -F 'Files={your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "TextBox", isRequired: true, textDirection: TextDirection.RTL, type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField }; var signer = new DocumentSigner( name: "David", emailAddress: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { DisableEmails = true, Signers = documentSigners, Files = filesToUpload, Title = "Sample Document" }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "textDirection": "RTL" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "textDirection": "RTL",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, set the `fieldType` as `TextBox` and the `textDirection` property to one of the supported text directions like `RTL` and `LTR`. Upon executing the above code, a document will be generated with the specified text direction value for the textbox form fields. --- # File: how-to-guides\how-to-remind-the-signers-to-sign-the-document-automatically.md # How to Set Automatic Reminders for Signers BoldSign supports sending auto reminders to signers to complete the signing process. You can set up auto reminders when creating the document. This feature also enables you to specify the number of days between each reminder and the total number of reminders to be sent to signers until they complete the signing process. When you send a document to signer, you can enable auto reminder in `ReminderSettings` object. When auto reminder (`EnableAutoReminder`) is enabled, you can choose how frequently the reminder should continue following the first reminder by adding days in the (`ReminderDays`) and set the number of reminders to be sent(`ReminderCount`). You can set up to 5 reminders. ## Some key points to note The user can only change these configurations while creating the document, which cannot be changed after the document has been sent. If a document you sent is expired, then the automatic reminders will not be send. The reminders will be sent automatically at specified intervals and a specified number of times until the document is signed. You have to send reminder at next day interval until the document is signed when a signer ignores the reminder. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'ReminderSettings.EnableAutoReminder=true' \ -F 'ReminderSettings.ReminderDays=4' \ -F 'ReminderSettings.ReminderCount=3' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", signerType: SignerType.Signer, formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Agreement", ReminderSettings = new ReminderSettings() { EnableAutoReminder = true, ReminderCount = 3, ReminderDays = 4 }, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Agreement", 'ReminderSettings.EnableAutoReminder': 'true', 'ReminderSettings.ReminderDays': '4', 'ReminderSettings.ReminderCount': '3', } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "Hanky",\r\n "emailAddress": "hankyWhites@cubeflakes.com",\r\n "signerType": "Signer", \r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "signature",\r\n "name": "signature",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', 'Agreement'); data.append('ReminderSettings.EnableAutoReminder', 'true'); data.append('ReminderSettings.ReminderDays', '4'); data.append('ReminderSettings.ReminderCount', '3'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the example above, set the `EnableAutoReminder` field as `true` and configure the `ReminderDays` and `ReminderCount` properties value according to your requirements. Upon executing the provided code, a document will be generated with the auto reminders at specified intervals and a specified number of times until the document is signed. --- # File: how-to-guides\how-to-remove-formfields.md # Remove Form Fields When Sending from Template When you no longer need a specific form field in a document while sending it from a template, BoldSign allows you to remove it via the API. To remove a field using the BoldSign API, you will need the `Id` of the field you wish to remove. You can retrieve the ID of the form field by using the Properties API. For more information, refer to the [Properties](https://developers.boldsign.com/documents/document-details-and-status/?region=us) API documentation. Once you have the Id of the form field, you can use the `RemoveFormFields` property to remove the form fields based on the ID. Below are examples of how to remove an existing form field when sending a document from a template: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=2b216722-xxxx-xxxx-8fbf-b6e49f9138a9' \ -H 'accept: application/json' \ -H 'X-API-KEY:{Your API Key} ' \ -H 'Content-Type: application/json' \ -d '{ "title": "Invitation form", "message": "Kindly review and sign this.", "roles": [ { "RoleIndex": 1, "signerName": "David", "signerEmail": "david@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", } ], "removeFormFields":["Label1","CheckBox1"] }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var templateRole = new Roles( roleSignerName:"David", roleSignerEmailAddress:"david@cubeflakes.com", roleSignerIndex:1, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "2b216722-xxxx-xxxx-8fbf-b6e49f9138a9", Roles = roles, RemoveFormFields = new List(){"Label1","CheckBox1"} }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/send?templateId=2b216722-xxxx-xxxx-8fbf-b6e49f9138a9" payload = { "title": "Invitation form", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "David", "signerEmail": "david@cubeflakes.com", } ], "removeFormFields": ["Label1", "CheckBox1"] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function SendTemplate() { try { const sendResponse = await axios.post( 'https://api.boldsign.com/v1/template/send', { roles: [ { roleIndex: 1, signerName: "David", signerEmail: "david@cubeflakes.com" } ], title: 'Simple document', message: 'Kindly review and sign this.', removeFormFields: ["Label1", "CheckBox2"], }, { params: { templateId: '2b216722-xxxx-xxxx-8fbf-b6e49f9138a9', }, headers: { accept: 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json', }, } ); console.log(JSON.stringify(sendResponse.data)); return sendResponse; } catch (error) { console.error('Error:', error.response ? error.response.data : error.message); } } SendTemplate(); ``` {% /codetab %} In the provided code example, make sure to replace the values for `removeformfields` with the ID of the form field you want to delete. Once the code is executed, the specified form field will be removed from the document when sending it from the template. --- # File: how-to-guides\How-to-request-esignature-via-sms.md # How to Request eSignature via SMS Easily BoldSign offers options to send the documents to signers via SMS. This article guides you on how to send a document for signing via SMS using the BoldSign API. ## Send document to the signer via SMS(Text messages) Below are example codes for sending a document to the signer via SMS: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message=Please sign this' \ -F 'Signers={ "name": "David", "deliveryMode":"SMS", "phoneNumber": { "countryCode": "{signer country code}", "number": "{signer phone number}" }, "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "signer", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 100, "height": 60 }, "isRequired": true } ] }' \ -F 'Files=@{your file path}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "signature", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new BoldSign.Model.Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", phoneNumber: new PhoneNumber( countryCode: "{signer country code}", number: "{signer phone number}"), formFields: formFieldCollections, locale: Locales.EN); signer.DeliveryMode = DeliveryMode.SMS; var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Message="Please sign this", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId.ToString()); ``` Python ```python import requests import json url="https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "phoneNumber": { "countryCode": "{signer country code}", "number": "{signer phone number}" }, "signerType": "Signer", "deliveryMode": "SMS", "signerRole": "Signer", "formFields": [ { "id": "Signature", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "EN" } headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document", 'Message': "Please sign this" } files = [ ('Files', ('{your file name}', open('your file path', 'rb'), 'application/pdf')) ] response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('Message', 'Please sign this.'); form.append('Signers', '{\n "name": "David",\n "deliveryMode":"SMS",\n "phoneNumber":{"countryCode":"{signer country code}","number":"{signer phone number}"},\n "formFields": [\n {\n "fieldType": "Signature",\n "pageNumber": 1,\n "bounds": {\n "x": 100,\n "y": 100,\n "width": 100,\n "height": 50\n },\n "isRequired": true\n }\n ]\n}'); form.append('Files', fs.createReadStream('{your file path}')); form.append('Title', 'Sample document'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...form.getHeaders() }, data : form }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above examples, update the `phonenumber` with the phone number(along with country code) of the signer. Update the `deliveryMode` as `SMS`. Additionally, replace the `Files` and `Title` properties with the appropriate document you want to send and its title. Also, provide form fields for the document in the `formFields` array. After executing the above code, the document will be created, and an SMS(Text Messages) will be sent to the signer. Now, the signer can sign the document by clicking the link in the SMS(Text Messages). --- # File: how-to-guides\How-to-request-the-signatures-without-email-notifications.md # Request Signatures Without Email Notifications BoldSign allows you to request signatures without sending email notifications to signers and get signatures from signers through signing link using embedded signing.This guide will go through the process of requesting signature without sending emails using BoldSign API. ## Disable Emails Notification If you want to manage the signature process within your application and prevent email notifications from being sent to signers, BoldSign allows you to disable email notifications when sending documents using the API. This ensures that recipients will not receive any email communication associated with the signing process.By setting ` DisableEmails` to `true`, you can disable the email notifications. Here are example codes that can be used to achieve this: **Code snippet** {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=b8085b47-63b3-47f8-8d5e-cb0acfe2d916' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Invitation form", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerOrder": 1, "signerEmail": "david@cubeflakes.com", "privateMessage": "Please check and sign the document.", "signerType": "Signer", "signerRole": "Manager", "formFields": [ { "id": "SignField", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 100, "height": 50 }, "isRequired": true }, ], "locale": "EN" } ], "disableEmails": true, }` ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var signatureField = new FormField( id: "sign_id", type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldsCollections = new List { signatureField, }; var templateRole = new Roles( roleSignerName: "David", roleSignerEmailAddress: "david@cubeflakes.com", roleSignerIndex: 1, formFields: formFieldsCollections, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "01c19aef-2dad-476d-b801-7178ef2e1036", Roles = roles, DisableEmails=true, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId.ToString()); ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/send?templateId=01c19aef-2dad-476d-b801-7178ef2e1036" payload = "{\n \"disableEmails\":true, \n \"roles\": [\n {\n \"roleIndex\": 1,\n \"signerName\": \"David\",\n \"signerEmail\": \"david@cubeflakes.com\",\n \"formFields\": [\n {\n \"fieldType\": \"Signature\",\n \"pageNumber\": 1,\n \"bounds\": {\n \"x\": 100,\n \"y\": 100,\n \"width\": 100,\n \"height\": 50\n }\n }\n ]\n }\n ]\n}" headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js async function GetData(){ const axios = require('axios'); const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'David', 'signerEmail': 'david@cubeflakes.com', 'formFields': [ { 'fieldType': 'Signature', 'pageNumber': 1, 'bounds': { 'x': 100, 'y': 100, 'width': 100, 'height': 50 } } ] } ], 'disableEmails': true, }, { params: { 'templateId': '01c19aef-2dad-476d-b801-7178ef2e1036' }, headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); console.log(JSON.stringify(response.data)); ``` {% /codetab %} ## Get Signing Link If email notifications disabled, you can obtain the signatures from signers using signing link through embedded signing. You can embed the signing request in your application to facilitate the signature process without sending email notifications. **Code snippet** Here are example codes that can be used to achieve this: {% codetab id="codetab2"%} cURL ```shell curl -X 'GET' \ 'https://api.boldsign.com/v1/document/getEmbeddedSignLink?DocumentId=17882g56-6686-46d9-dhg3-ce5737751234&SignerEmail=david@cubeflakes.com' \ -H 'accept: application/json;odata.metadata=minimal;odata.streaming=true' \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var documentClient = new DocumentClient(apiClient); EmbeddedSigningLink embeddedSigningLink = await documentClient.GetEmbeddedSignLinkAsync(documentCreated.DocumentId, "david@cubeflakes.com").ConfigureAwait(false); string signLink = embeddedSigningLink.SignLink; Console.WriteLine(signLink); ``` Python ```python url = f"https://api.boldsign.com/v1/document/getEmbeddedSignLink?documentId={response.json()['documentId']}&signerEmail=david@cubeflakes.com" payload = {} response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const response1 = await axios.get("https://api.boldsign.com/v1/document/getEmbeddedSignLink", { headers: { 'X-API-KEY': '{Your API key}' }, params: { documentId: response.data.documentId, signerEmail: "david@cubeflakes.com" }, }); console.log(response1.data.signLink); } ``` {% /codetab %} In conclusion, enabling the `DisableEmails` option prevents signers from receiving email notifications. Meanwhile, utilizing embedded signing provides a signing link. Consequently, you can seamlessly acquire the signer's signature within your application using embedded signing. --- # File: how-to-guides\how-to-send-a-private-message-to-the-signer-when-sending-a-document-via-API.md # How to Send Private Message to Signer Easily BoldSign supports sending private messages to signers when sending a document via API. This feature is particularly useful when you need to provide specific instructions or information to individual signers. The sender can send a private message to each recipient when sending a document. Below are example codes for sending a private message to a signer: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Invitation form"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "privateMessage": "This is private message for signer", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Signers={ "name": "Cilian", "emailAddress": "cilianmurphy@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 150, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "Signature", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var signatureField1 = new FormField( id: "Signature1", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 150, width: 125, height: 25)); var formFieldCollections = new List() { signatureField }; var formFieldCollections1 = new List() { signatureField1 }; var signer = new DocumentSigner( signerName: "Hanky", signerType: SignerType.Signer, signerEmail: "hankyWhites@gmail.com", privateMessage: "This is private message for signer", formFields: formFieldCollections, locale: Locales.EN); var signer1 = new DocumentSigner( signerName: "Cilian", signerType: SignerType.Signer, signerEmail: "cilianmurphy@cubeflakes.com", formFields: formFieldCollections1, locale: Locales.EN); var documentSigners = new List() { signer, signer1 }; var sendForSign = new SendForSign() { Title = "Sample Document", HideDocumentId = false, Signers = documentSigners, Files = filesToUpload, }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@gmail.com", "privateMessage": "This is private message for signer", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True } ], "locale": "EN" } signer_data1 = { "name": "Cilian", "emailAddress": "cilianmurphy@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature1", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 150, "width": 125, "height": 25 }, "isRequired": True } ], "locale": "EN" } payload = { 'Signers': [json.dumps(signer_data), json.dumps(signer_data1)], 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n,\r\n "privateMessage": "This is private message for signer",\r\n "formFields": [\r\n {\r\n "id": "Signature",\r\n "name": "Signature",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Title', "Sample Document"); data.append('Signers', '{\r\n "name": "cilian",\r\n "emailAddress": "cilianmurphy@cubeflakes.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "Signature1",\r\n "name": "Signature",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 150,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Title', "Sample Document"); data.append('Files', fs.createReadStream('{Your file path}')); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` PHP ```php false, // Disable SSL verification ]); $headers = [ 'accept' => 'application/json', 'X-API-KEY' => '{Your API Key}' ]; $options = [ 'multipart' => [ [ 'name' => 'Signers', 'contents' => '{ "name": "David", "emailAddress": "david@boldsign.dev", "signerType": "Signer", "privateMessage" : "This is private message for signer", "formFields": [ { "id": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' ], [ 'name' => 'Signers', 'contents' => '{ "name": "Henry", "emailAddress": "henry@boldsign.dev", "signerType": "Signer", "formFields": [ { "id": "Signature1", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 150, "width": 125, "height": 25 }, "isRequired": true } ], "locale": "EN" }' ], [ 'name' => 'Title', 'contents' => 'Sample' ], [ 'name' => 'Files', 'contents' => Utils::tryFopen('{Your File Path}', 'r'), 'filename' => '{Your File name}', 'headers' => [ 'Content-Type' => 'application/pdf' ] ] ]]; $request = new Request('POST', 'https://api.boldsign.com/v1/document/send', $headers); $res = $client->sendAsync($request, $options)->wait(); echo $res->getBody(); ?> ``` {% /codetab %} In the example above, set the `privateMessage` property with the desired message you want to send to each signer. By executing any of the provided code examples, the document will be sent for signature, and each signer will receive the specified private message intended for them. --- # File: how-to-guides\how-to-send-signature-request-through-both-email-and-SMS.md # Send Signature Request via Email and SMS BoldSign offers three options to send the documents to signers: 1. Email 2. SMS 3. Email & SMS In this article, we will walk through how to request a signature from a signer through both email and SMS using the BoldSign API. It's important to note that SMS feature will be avilable only for paid plans. ## Send document to the signer via Email and SMS Below are example codes for sending a document to the signer via both `Email` and `SMS`: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Message=' \ -F 'Signers={ "name": "Hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "deliveryMode": "EmailAndSMS", "phoneNumber": { "countryCode": "{Signer country code}", "number": "{Signer phone number}" }, "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": true } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ -F 'Title={title}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your file path}", }; var filesToUpload = new List { documentFilePath, }; var signatureField = new FormField( id: "sign", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50)); var formFieldCollections = new List() { signatureField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); signer.DeliveryMode = DeliveryMode.EmailAndSMS; signer.PhoneNumber = new PhoneNumber( countryCode: "{Signer country code}", number: "{Signer phone number}" ); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Title = "Agreement", Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "Hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "deliveryMode": "EmailAndSMS", "phoneNumber": { "countryCode": "{Signer country code}", "number": "{Signer phone number}" }, "formFields": [ { "id": "signature", "name": "signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 200 }, "isRequired": True } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': '{title}' } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "Hanky", \r\n "emailAddress": "hankyWhites@gmail.com", \r\n "signerType": "Signer", \r\n "signerRole": "Signer", \r\n "deliveryMode": "EmailAndSMS",\r\n "phoneNumber": {\r\n "countryCode": "{Signer country code}",\r\n "number": "{Signer phone number}"\r\n },\r\n "formFields": [\r\n {\r\n "id": "signature",\r\n "name": "signature",\r\n "fieldType": "Signature",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n },\r\n "isRequired": true\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', '{title}'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} Replace the values (`Files,` `Signers,` etc.) with the actual values. Set the value for `deliveryMode` as `EmailAndSMS,` and provide values for `countryCode` and `number` with the signer's country code and phone number. Upon execution, the document will be created and send to signer via both `SMS` and `Email`, and a document ID will be generated. --- # File: how-to-guides\how-to-set-additional-form-fields-to-existing-template.md # Add Form Fields When Sending from a Template BoldSign supports adding new form fields when sending a document from a template, in addition to the existing form fields available in that template. You can add additional form fields in the `formFields` array when sending the document from the template. Follow the steps below to send a document for signature using an already created template: 1. Create a template in BoldSign's web app. Refer to [How to Create a Template in the BoldSign Web App](https://support.boldsign.com/en-US/kb/article/31/create-template) for instructions. 2. Copy the ID of the template. 3. Use the copied template ID and send the document to your signers by adding additional form fields. Here are example codes that you can use for this purpose: ## Code snippet {% codetab %} cURL ```shell curl --location --request POST 'https://api.boldsign.com/v1/template/send?templateId={templateID}' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer eyJhbG...' \ --data-raw '{ "roles": [ { "roleIndex": 1, "signerEmail": "david@cubeflakes.com", "signerName": "David", "formFields": [ { "id": "Image", "name": "Image", "fieldType": "Image", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 125, "height": 25 }, "imageInfo": { "title": "Image title", "description": "Image description", "allowedFileExtensions": ".jpg, .png" }, "isRequired": true }, { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 50, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "value": "Prefilled Value" }, { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 50, "y": 300, "width": 125, "height": 25 }, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-12-01T18:18:08.567Z", "maxDate": "2023-12-28T18:18:08.567Z" } }, { "id": "DateSigned", "name": "DateSigned", "fieldType": "DateSigned", "pageNumber": 1, "bounds": { "x": 50, "y": 400, "width": 125, "height": 25 }, "isRequired": true, "dateFormat": "dd/MM/yyyy" }, { "id": "DropDown", "name": "DropDown", "fieldType": "DropDown", "pageNumber": 1, "bounds": { "x": 50, "y": 500, "width": 125, "height": 25 }, "isRequired": true, "dropdownOptions":["Male", "Female"], "value": "Male" }, { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "Label", "name": "Label", "fieldType": "Label", "pageNumber": 1, "bounds": { "x": 50, "y": 700, "width": 200, "height": 25 }, "value": "https://dev-app.boldsign.com/" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 400, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "attachmentInfo": { "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"], "title": "Attachment title", "description": "Please attach the proof" } }, { "id": "Company", "name": "Company", "fieldType": "Company", "pageNumber": 1, "bounds": { "x": 400, "y": 200, "width": 125, "height": 25 }, "isRequired": true }, { "id": "Title", "name": "Title", "fieldType": "Title", "pageNumber": 1, "bounds": { "x": 400, "y": 300, "width": 125, "height": 25 }, "isRequired": true }, { "id": "RadioButton", "name": "RadioButton", "fieldType": "RadioButton", "pageNumber": 1, "bounds": { "x": 400, "y": 400, "width": 50, "height": 25 }, "groupName": "RadioChild" }, { "id": "CheckBox", "name": "CheckBox", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "x": 400, "y": 500, "width": 50, "height": 25 }, "isChecked": true, "isRequired": true }, { "id": "Initial", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 400, "y": 600, "width": 125, "height": 25 }, "isRequired": true }, { "id": "Signature", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 400, "y": 700, "width": 125, "height": 25 }, "isRequired": true } ] } ] }' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var templateClient = new TemplateClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{file path}" }; var filesToUpload = new List { documentFilePath, }; var DateSignedField = new DateSignedField( isRequired: true, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25), dateFormat:"dd/MM/yyyy", id: "DateSignedField" ); var EditableDateField = new FormField( id: "EditableDate", isRequired: true, type: FieldType.EditableDate, pageNumber: 1, bounds: new Rectangle(x: 100, y: 200, width: 125, height: 25), editableDateFieldSettings: new EditableDateFieldSettings(dateFormat:"dd/MM/yyyy", minDate: DateTime.Now, maxDate: DateTime.Now.AddDays(10))); var TextBoxField = new FormField( id: "TextBox", isRequired: true, value: "Prefilled Value", dataSyncTag: "1", type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 100, y: 300, width: 125, height: 25)); var dropdownField = new DropdownField( id: "DropDown", isRequired: true, dropdownOptions: new List { "Male", "Female" }, value: "Male", pageNumber: 1, bounds: new Rectangle(x: 100, y: 400, width: 125, height: 25)); var imageField = new FormField( id: "Image", isRequired: true, type: FieldType.Image, pageNumber: 1, imageInfo: new ImageInfo(title: "Image title", description: "Image description", allowedFileExtensions: ".jpg, .png"), bounds: new Rectangle(x: 100, y: 500, width: 125, height: 25)); var signatureField = new FormField( id: "Signature", isRequired: true, type: FieldType.Signature, pageNumber: 1, bounds: new Rectangle(x: 100, y: 600, width: 125, height: 25)); var initialField = new FormField( id: "Initial", isRequired: true, type: FieldType.Initial, pageNumber: 1, bounds: new Rectangle(x: 100, y: 700, width: 125, height: 25)); var attachmentField = new FormField( id: "Attachment", isRequired: true, type: FieldType.Attachment, pageNumber: 1, attachmentInfo: new AttachmentInfo(title: "Attachment title", description: "Please attach the proof", acceptedFileTypes: ["PDF", "DOCUMENT", "IMAGE"]), bounds: new Rectangle(x: 400, y: 100, width: 125, height: 25)); var hyperlinkField = new FormField( id: "Hyperlink", isRequired: true, type: FieldType.Hyperlink, pageNumber: 1, hyperlinkText: "Click here", value: "https://www.google.com", bounds: new Rectangle(x: 400, y: 200, width: 125, height: 25)); var labelField = new FormField( id: "Label", isRequired: true, type: FieldType.Label, pageNumber: 1, value: "https://www.google.com", bounds: new Rectangle(x: 400, y: 300, width: 125, height: 25)); var companyField = new FormField( id: "Company", isRequired: true, type: FieldType.Company, pageNumber: 1, bounds: new Rectangle(x: 400, y: 400, width: 125, height: 25)); var titleField = new FormField( id: "Title", isRequired: true, type: FieldType.Title, pageNumber: 1, bounds: new Rectangle(x: 400, y: 500, width: 125, height: 25)); var radioButtonField = new RadioButtonField( id: "RadioButton", isRequired: true, groupName: "Radio", pageNumber: 1, bounds: new Rectangle(x: 400, y: 600, width: 125, height: 25)); var checkBoxField = new FormField( id: "CheckBox", isRequired: true, type: FieldType.CheckBox, pageNumber: 1, bounds: new Rectangle(x: 400, y: 700, width: 125, height: 25)); var formFieldCollections = new List() { imageField, DateSignedField, EditableDateField, TextBoxField, dropdownField, signatureField, initialField, attachmentField, hyperlinkField, labelField, companyField, titleField, radioButtonField, checkBoxField }; var role = new Roles( roleIndex: 1, signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections); var roles = new List() { role }; var sendForSignFromTemplate = new SendForSignFromTemplate() { Title = "Sample Document", TemplateId = "040e6671-c9a8-426d-a0c5-ad2700d80f40", Roles = roles }; var templateCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); ``` Python ```python import requests url = "https://api.boldsign.com/v1/template/send?templateId={templateID}" payload = { "roles": [ { "roleIndex": 1, "signerName": "David", "signerEmail": "david@cubeflakes.com", "formFields": [ { "id": "Image", "name": "Image", "fieldType": "Image", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 125, "height": 25 }, "imageInfo": { "title": "Image title", "description": "Image description", "allowedFileExtensions": ".jpg, .png" }, "isRequired": True }, { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 50, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "value": "Prefilled Value" }, { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 50, "y": 300, "width": 125, "height": 25 }, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-12-01T18:18:08.567Z", "maxDate": "2023-12-28T18:18:08.567Z" } }, { "id": "DateSigned", "name": "DateSigned", "fieldType": "DateSigned", "pageNumber": 1, "bounds": { "x": 50, "y": 400, "width": 125, "height": 25 }, "isRequired": True, "dateFormat": "dd/MM/yyyy" }, { "id": "DropDown", "name": "DropDown", "fieldType": "DropDown", "pageNumber": 1, "bounds": { "x": 50, "y": 500, "width": 125, "height": 25 }, "isRequired": True, "dropdownOptions":["Male", "Female"], "value": "Male" }, { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "Label", "name": "Label", "fieldType": "Label", "pageNumber": 1, "bounds": { "x": 50, "y": 700, "width": 200, "height": 25 }, "value": "https://dev-app.boldsign.com/" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 400, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "attachmentInfo": { "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"], "title": "Attachment title", "description": "Please attach the proof" } }, { "id": "Company", "name": "Company", "fieldType": "Company", "pageNumber": 1, "bounds": { "x": 400, "y": 200, "width": 125, "height": 25 }, "isRequired": True }, { "id": "Title", "name": "Title", "fieldType": "Title", "pageNumber": 1, "bounds": { "x": 400, "y": 300, "width": 125, "height": 25 }, "isRequired": True }, { "id": "RadioButton", "name": "RadioButton", "fieldType": "RadioButton", "pageNumber": 1, "bounds": { "x": 400, "y": 400, "width": 50, "height": 25 }, "groupName": "RadioChild" }, { "id": "CheckBox", "name": "CheckBox", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "x": 400, "y": 500, "width": 50, "height": 25 }, "isChecked": True, "isRequired": True }, { "id": "Initial", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 400, "y": 600, "width": 125, "height": 25 }, "isRequired": True }, { "id": "Signature", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 400, "y": 700, "width": 125, "height": 25 }, "isRequired": True } ] } ] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, json=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'David', 'signerEmail': 'david@cubeflakes.com', 'formFields': [ { "id": "Image", "name": "Image", "fieldType": "Image", "pageNumber": 1, "bounds": { "x": 50, "y": 100, "width": 125, "height": 25 }, "imageInfo": { "title": "Image title", "description": "Image description", "allowedFileExtensions": ".jpg, .png" }, "isRequired": true }, { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 50, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "value": "Prefilled Value" }, { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 50, "y": 300, "width": 125, "height": 25 }, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-12-01T18:18:08.567Z", "maxDate": "2023-12-28T18:18:08.567Z" } }, { "id": "DateSigned", "name": "DateSigned", "fieldType": "DateSigned", "pageNumber": 1, "bounds": { "x": 50, "y": 400, "width": 125, "height": 25 }, "isRequired": true, "dateFormat": "dd/MM/yyyy" }, { "id": "DropDown", "name": "DropDown", "fieldType": "DropDown", "pageNumber": 1, "bounds": { "x": 50, "y": 500, "width": 125, "height": 25 }, "isRequired": true, "dropdownOptions":["Male", "Female"], "value": "Male" }, { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "Label", "name": "Label", "fieldType": "Label", "pageNumber": 1, "bounds": { "x": 50, "y": 700, "width": 200, "height": 25 }, "value": "https://dev-app.boldsign.com/" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 400, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "attachmentInfo": { "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"], "title": "Attachment title", "description": "Please attach the proof" } }, { "id": "Company", "name": "Company", "fieldType": "Company", "pageNumber": 1, "bounds": { "x": 400, "y": 200, "width": 125, "height": 25 }, "isRequired": true }, { "id": "Title", "name": "Title", "fieldType": "Title", "pageNumber": 1, "bounds": { "x": 400, "y": 300, "width": 125, "height": 25 }, "isRequired": true }, { "id": "RadioButton", "name": "RadioButton", "fieldType": "RadioButton", "pageNumber": 1, "bounds": { "x": 400, "y": 400, "width": 50, "height": 25 }, "groupName": "RadioChild" }, { "id": "CheckBox", "name": "CheckBox", "fieldType": "CheckBox", "pageNumber": 1, "bounds": { "x": 400, "y": 500, "width": 50, "height": 25 }, "isChecked": true, "isRequired": true }, { "id": "Initial", "name": "Initial", "fieldType": "Initial", "pageNumber": 1, "bounds": { "x": 400, "y": 600, "width": 125, "height": 25 }, "isRequired": true }, { "id": "Signature", "name": "Signature", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 400, "y": 700, "width": 125, "height": 25 }, "isRequired": true } ], } ] }, { params: { 'templateId': '{templateID}' }, headers: { 'accept': 'application/json', 'X-API-KEY': '{your API key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); ``` {% /codetab %} In the above examples, add the form fields to the `formFields` array and set the values for `signerName` and `signerEmail`. After executing the above code, the document will be created with additional form fields, and an email will be sent to the signer. The signer can then fill out those form fields in the document and complete the signing. --- # File: how-to-guides\how-to-set-attachment-form-fields.md # Require Signers to Upload Files While Signing The sender can request attachments from the signers while sending a document by using the `Attachment` field. This field can be used to collect additional information from the signer, such as a resume or other supporting documentation. This is useful when the signer wants to upload their ID proof, contract terms, etc. A single document can contain multiple attachment fields. The supported file formats are PDF (.pdf), Word (.docx), and Image (.jpg, .jpeg, .png). You can set `Attachment` form field as mandatory for signer to upload a documents like ID proof, resume, etc. You cannot complete the signing process when the signer does not upload the document if the `Attachment` form field is set as mandatory. Once the document is uploaded, the `Attachment` form field will be marked as attached like below image. If the document is not uploaded, the `Attachment` form field will be marked as attachment. ![Attached](/static/images/guides/set-attachment-form-fields/attached.png) Once you complete the signing process, you can access the attachment using `Download attachment` under `More Actions` category. ![View Attachment](/static/images/guides/set-attachment-form-fields/view-attachment.png) Lower order signer cannot view the attachment uploaded by higher order signer when we have multiple signers. ## Send a document to the signer with Attachment fields: You can set the `Attachment` form field by providing `attachmentInfo` object and you can add `title`, `description` and `acceptedFileTypes`. ### Supported Accepted File Types - PDF - DOCUMENT - IMAGE ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "attachmentInfo": { "title": "Attachment title", "description": "Please attach the proof", "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"] } } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var attachmentField = new FormField( id: "Attachment", isRequired: true, type: FieldType.Attachment, pageNumber: 1, attachmentInfo: new AttachmentInfo(title: "Attachment title", description: "Please attach the proof", acceptedFileTypes: ["PDF", "DOCUMENT", "IMAGE"]), bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25)); var formFieldCollections = new List() { attachmentField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "attachmentInfo": { "title": "Attachment title", "description": "Please attach the proof", "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"] } } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "Attachment",\r\n "name": "Attachment",\r\n "fieldType": "Attachment",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "isRequired": true,\r\n "attachmentInfo" : { \r\n "title": "Attachment title",\r\n "description": "Please attach the proof",\r\n "acceptedFileTypes" : ["PDF", "DOCUMENT", "IMAGE"]\r\n }\r\n }\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the given example, replace the `attachmentInfo` values with the desired values. Set the `fieldType` as `Attachment` and specify the `acceptedFileTypes` as the type of file you want the signers to upload. Upon executing the provided code, a document will be generated with the specified `attachmentInfo` values for the `Attachment` form fields. --- # File: how-to-guides\how-to-set-character-limit-for-form-fields.md # How to Set Character Limit for Form Fields These limits act as instructions for signers, outlining the anticipated input length. This proves beneficial in scenarios where a specific format or length is required, such as phone numbers, zip codes, or credit card numbers. If you establish a character limit of 10 for a textbox field, the signer will not be able to exceed the specified character limit. By default, the character limit is set at 50 but you can always increase or decrease depending on your needs and preferences. Here are example codes you can use to set `characterLimit`: ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "characterLimit": 10 } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "TextBox", isRequired: true, type: FieldType.TextBox, characterLimit: 10, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Files = filesToUpload, Title = "Sample Document" }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "characterLimit": 10 } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "characterLimit": 10,\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the given scenario, specify the `fieldType` as `TextBox`, and utilize the `characterLimit` property to effortlessly set the maximum allowable characters for user input, offering precise instructions for particular data formats. Upon running the provided code, a document will be generated with the designated `characterLimit` value applied to the textbox form fields. --- # File: how-to-guides\how-to-set-date-format-on-a-form-field.md # How to Set Date Format for Date Fields You can apply date format to `EditableDate` and `DateSigned` fields to specify the desired format for displaying date values. ## Supported date formats BoldSign API supports a variety of date formats, including: - MM/dd/yyyy - dd/MM/yyyy - dd-MMM-yyyy - MMM-dd-yyyy - MMM dd,yyyy - dd MMM,yyyy - yyyy,MMM dd - yyyy/MM/dd - dd-MM-yyyy - MM-dd-yyyy - yyyy-MM-dd ## Applying date format to editable date fields To apply a date format to the `EditableDate` fields, use the `dateFormat` property in the `EditableDateFieldSettings` object. ## Applying date format to date digned fields To apply a date format to the `DateSigned` fields, use the `dateFormat` property. ## Default date format If no format is specified, BoldSign uses the default format from your account settings, which you can manage in your BoldSign [Business profile](https://support.boldsign.com/kb/article/13899/change-default-date-format). Here are example codes you can use to set the date format for date fields: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "DateSigned", "name": "DateSigned", "fieldType": "DateSigned", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "dateFormat": "dd/MM/yyyy" }, { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z" } } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var DateSignedField = new DateSignedField( isRequired: true, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25), dateFormat:"dd/MM/yyyy", id: "DateSignedField" ); var EditableDateField = new FormField( id: "EditableDate", isRequired: true, type: FieldType.EditableDate, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25), editableDateFieldSettings: new EditableDateFieldSettings(dateFormat:"dd/MM/yyyy")); var formFieldCollections = new List() { DateSignedField, EditableDateField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { DisableEmails = true, Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "DateSigned", "name": "DateSigned", "fieldType": "DateSigned", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "dateFormat": "dd/MM/yyyy" }, { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z" } } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "DateSigned",\r\n "name": "DateSigned",\r\n "fieldType": "DateSigned",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n },\r\n "isReadOnly": true,\r\n "dateFormat": "dd/MM/yyyy",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites1@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "EditableDate",\r\n "name": "EditableDate",\r\n "fieldType": "EditableDate",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n },\r\n "editableDateFieldSettings": {\r\n "dateFormat": "dd/MM/yyyy",\r\n "minDate": "2023-07-01T18:18:08.567Z", \r\n "maxDate": "2023-07-31T18:18:08.567Z"\r\n },\r\n "isReadOnly": true,\r\n "dateFormat": "dd/MM/yyyy",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, set the `fieldType` as `dateSigned` or `editableDate` and `dateFormat` property to one of the supported date formats. Upon executing the above code, a document will be generated with the specified date format values for the date signed and editable date fields. --- # File: how-to-guides\how-to-set-date-range-on-a-form-field.md # Set Date Range for Editable Date Fields BoldSign's API allows you to send documents out for signature with editable date fields. This will be useful for situations where you need the signer to enter a specific date, such as a contract start date or a payment due date. To provide a date range for an `EditableDate` field, you can use the `minDate` and `maxDate` properties of the `editableDateFieldSettings` object. ## How to set min date and max date: The `minDate` and `maxDate` properties are optional. If left unspecified, the signer will have the flexibility to choose any date. However, if you set `minDate` to "11/28/2023" and `maxDate` to "12/28/2023," the signer will be restricted to selecting a date within the specified range. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z" } } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var EditableDateField = new FormField( id: "EditableDate", isRequired: true, type: FieldType.EditableDate, pageNumber: 1, bounds: new Rectangle(x: 200, y: 200, width: 125, height: 25), editableDateFieldSettings: new EditableDateFieldSettings(dateFormat:"dd/MM/yyyy", minDate: DateTime.Now, maxDate: DateTime.Now.AddDays(10))); var formFieldCollections = new List() { EditableDateField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "EditableDate", "name": "EditableDate", "fieldType": "EditableDate", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "editableDateFieldSettings": { "dateFormat": "dd/MM/yyyy", "minDate": "2023-07-01T18:18:08.567Z", "maxDate": "2023-07-31T18:18:08.567Z" } } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "EditableDate",\r\n "name": "EditableDate",\r\n "fieldType": "EditableDate",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n },\r\n "editableDateFieldSettings": {\r\n "dateFormat": "dd/MM/yyyy",\r\n "minDate": "2023-07-01T18:18:08.567Z", \r\n "maxDate": "2023-07-31T18:18:08.567Z"\r\n },\r\n "isReadOnly": true,\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the given example, replace the `minDate` and `maxDate` values with the desired dates. Set the field type as `EditableDate` and configure the `minDate` and `maxDate` properties according to the supported date formats. Upon executing the provided code, a document will be generated with the specified date range values for the editable date form fields. --- # File: how-to-guides\how-to-set-drop-down-form-fields.md # Add Dropdown Form Fields for Signers Easily BoldSign supports to incorporate Dropdown fields into your documents, allowing signers to choose from a predetermined list of options. ## Send a document to the signer with Dropdown fields: You can set the dropdown form field by providing `dropdownOptions` presenting it as a dropdown list of choices. Here are some example codes you can use to set dropdown form fields: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "DropDown", "name": "DropDown", "fieldType": "DropDown", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": true, "dropdownOptions":["Male", "Female"], "value": "Male" } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var dropdownField = new DropdownField( id: "DropDown", isRequired: true, dropdownOptions: new List { "Male", "Female" }, value: "Male", pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { dropdownField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "DropDown", "name": "DropDown", "fieldType": "DropDown", "pageNumber": 1, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "isRequired": True, "dropdownOptions":["Male", "Female"], "value": "Male" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "DropDown",\r\n "name": "DropDown",\r\n "fieldType": "DropDown",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "dropdownOptions": ["Male", "Female"],\r\n "value": "Male",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the given example, replace the `dropDownOptions` values with the desired values. Set the field type as `DropDown`. Upon executing the provided code, a document will be created with the specified `dropDownOptions` values for the `DropDown` form fields. --- # File: how-to-guides\how-to-set-hyperlink-form-fields.md # How to Add Hyperlink Form Fields to Documents BoldSign supports including a hyperlink when sending the document for a signing request. When signers click the hyperlink, they will be directed to the specified webpage or file. This is useful for providing additional information or resources related to the document being signed. ## Sending a document to the signer with hyperlink form fields: Specify the `fieldType` as `Hyperlink`, and provide the `hyperlinkText` (Text to Display) along with the Hyperlink URL within the `value` property. Please note that it is mandatory that you need to add any other form fields, other than `dateSigned` and `label` for a signing request while setting the `hyperlink` form field. ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "HyperLink_2", "name": "HyperLink Mail", "fieldType": "HyperLink", "pageNumber": 2, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkMailText", "value": "mailto:{emailAddress}" }, { "id": "HyperLink_3", "name": "HyperLink Phone", "fieldType": "HyperLink", "pageNumber": 3, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkPhoneText", "value": "tel:+{phone number with country code}" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "attachmentInfo": { "title": "Attachment title", "description": "Please attach the proof", "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"] } } ], "locale": "EN" }' \ -F 'Files=@{your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var hyperlinkField = new FormField( id: "Hyperlink", isRequired: true, type: FieldType.Hyperlink, pageNumber: 1, hyperlinkText: "Click here", value: "https://www.google.com", bounds: new Rectangle(x: 400, y: 200, width: 125, height: 25)); var hyperlinkMailField = new FormField( id: "Hyperlink_2", isRequired: true, type: FieldType.Hyperlink, pageNumber: 2, hyperlinkText: "Click here", value: "mailto:{emailAddress}", bounds: new Rectangle(x: 400, y: 200, width: 125, height: 25)); var hyperlinkPhoneField = new FormField( id: "Hyperlink_3", isRequired: true, type: FieldType.Hyperlink, pageNumber: 3, hyperlinkText: "Click here", value: "tel:+{phone number with country code}", bounds: new Rectangle(x: 400, y: 200, width: 125, height: 25)); var attachmentField = new FormField( id: "Attachment", isRequired: true, type: FieldType.Attachment, pageNumber: 1, attachmentInfo: new AttachmentInfo(title: "Attachment title", description: "Please attach the proof", acceptedFileTypes: ["PDF", "DOCUMENT", "IMAGE"]), bounds: new Rectangle(x: 400, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { hyperlinkField, hyperlinkMailField, hyperlinkPhoneField, attachmentField }; var signer = new DocumentSigner( signerName: "David", signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Title = "Sample Document", Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "HyperLink_2", "name": "HyperLink Mail", "fieldType": "HyperLink", "pageNumber": 2, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkMailText", "value": "mailto:{emailAddress}" }, { "id": "HyperLink_3", "name": "HyperLink Phone", "fieldType": "HyperLink", "pageNumber": 3, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkPhoneText", "value": "tel:+{phone number with country code}" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "attachmentInfo": { "title": "Attachment title", "description": "Please attach the proof", "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"] } } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const url = "https://api.boldsign.com/v1/document/send"; const signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "formFields": [ { "id": "HyperLink", "name": "HyperLink", "fieldType": "HyperLink", "pageNumber": 1, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkText", "value": "https://www.google.com" }, { "id": "HyperLink_2", "name": "HyperLink Mail", "fieldType": "HyperLink", "pageNumber": 2, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkMailText", "value": "mailto:{emailAddress}" }, { "id": "HyperLink_3", "name": "HyperLink Phone", "fieldType": "HyperLink", "pageNumber": 3, "bounds": { "x": 50, "y": 600, "width": 150, "height": 50 }, "hyperlinkText": "hyperlinkPhoneText", "value": "tel:+{phone number with country code}" }, { "id": "Attachment", "name": "Attachment", "fieldType": "Attachment", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "attachmentInfo": { "title": "Attachment title", "description": "Please attach the proof", "acceptedFileTypes": ["PDF", "DOCUMENT", "IMAGE"] } } ], "locale": "EN", }; const formData = new FormData(); formData.append('Signers', JSON.stringify(signer_data)); formData.append('Title', 'Sample Document'); formData.append('Files', fs.createReadStream('{Your file path}')); const headers = { ...formData.getHeaders(), 'X-API-KEY': '{Your API}' }; axios.post(url, formData, { headers }) .then((response) => { console.log(response.data); }) .catch((error) => { console.error(error); }); ``` {% /codetab %} In the above examples, set the values for `value`, `hyperlinkText`, `Title`, `Files`, `name`, and `emailAddress`. After executing the above code, the document will be created with a hyperlink form field, and an email will be sent to the signer for signing. --- # File: how-to-guides\how-to-set-image-form-fields.md # How to Set Image Upload Fields for Documents This knowledge base article will guide you on setting Image form fields in BoldSign documents using the API. There are 2 ways to achieve this. - Pre-define the Image field in the document before sending it. - Allow signers to add them dynamically. ## Send a document to the signer with Image fields: You can set the `Image` form field by providing `imageInfo` object and you can add `title`, `description` and `allowedFileExtensions`. ## Supported Allowed File Extensions - JPG or JPEG - SVG - PNG - BMP ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'DisableExpiryAlert=false' \ -F 'ReminderSettings.ReminderDays=5' \ -F 'BrandId=' \ -F 'ReminderSettings.ReminderCount=3' \ -F 'EnableReassign=true' \ -F 'Message=' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "formFields": [ { "id": "Image", "name": "Image", "fieldType": "Image", "pageNumber": 1, "isRequired": true, "bounds": { "x": 200, "y": 200, "width": 125, "height": 25 }, "imageInfo": { "title": "Add Image", "description": "Image Description", "allowedFileExtensions": ".jpg, .png" } } ], "locale": "EN" }' \ -F 'ExpiryDays=30' \ -F 'EnablePrintAndSign=false' \ -F 'AutoDetectFields=false' \ -F 'OnBehalfOf=' \ -F 'EnableSigningOrder=false' \ -F 'UseTextTags=false' \ -F 'SendLinkValidTill=' \ -F 'Files=@{your file}' -F 'Title=Invitation form' \ -F 'HideDocumentId=false' \ -F 'EnableEmbeddedSigning=false' \ -F 'ExpiryDateType=Days' \ -F 'ReminderSettings.EnableAutoReminder=true' \ -F 'ExpiryValue=60' \ -F 'DisableEmails=false' \ -F 'DisableSMS=false' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var imageField = new FormField( id: "image", isRequired: true, type: FieldType.Image, pageNumber: 1, imageInfo: new ImageInfo(title: "Add Image", description: "Image Description", allowedFileExtensions: ".jpg, .png"), bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { imageField }; var signer = new DocumentSigner( signerName: "David", signerType: SignerType.Signer, signerEmail: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Message = "please sign this", Title = "Agreement", HideDocumentId = false, Signers = documentSigners, Files = filesToUpload }; var documentCreated = documentClient.SendDocument(sendForSign); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "formFields": [ { "id": "Image", "name": "Image", "fieldType": "Image", "pageNumber": 1, "isRequired": True, "bounds": { "x": 50, "y": 50, "width": 200, "height": 25 }, "imageInfo": { "title": "Add Image", "description": "Image Description", "allowedFileExtensions": ".jpg, .png" } } ], "locale": "EN" } payload = { 'DisableExpiryAlert': 'false', 'ReminderSettings.ReminderDays': '3', 'BrandId': '', 'ReminderSettings.ReminderCount': '5', 'EnableReassign': 'true', 'Message': 'Please sign this.', 'Signers': json.dumps(signer_data), 'ExpiryDays': '10', 'EnablePrintAndSign': 'false', 'AutoDetectFields': 'false', 'OnBehalfOf': '', 'EnableSigningOrder': 'false', 'UseTextTags': 'false', 'SendLinkValidTill': '', 'Title': 'Agreement', 'HideDocumentId': 'false', 'EnableEmbeddedSigning': 'false', 'ExpiryDateType': 'Days', 'ReminderSettings.EnableAutoReminder': 'false', 'ExpiryValue': '60', 'DisableEmails': 'false', 'DisableSMS': 'false' } files=[ ('Files',('file',open('{Your File Path}','rb'),'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': 'Your API Key' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('DisableExpiryAlert', 'false'); form.append('ReminderSettings.ReminderDays', '3'); form.append('BrandId', ''); form.append('ReminderSettings.ReminderCount', '5'); form.append('EnableReassign', 'true'); form.append('Message', 'Please sign this.'); form.append('Signers', '{\n "name": "hanky",\n "emailAddress": "hankyWhites@gmail.com",\n "formFields": [\n {\n "fieldType": "Image",\n "pageNumber": 1,\n "bounds": {\n "x": 100,\n "y": 100,\n "width": 100,\n "height": 50\n },\n "isRequired": true,\n "imageInfo": {\n "title": "Add Image",\n "description": "Image Description",\n "allowedFileExtensions": ".jpg, .png"\n }\n }\n ]\n}'); form.append('ExpiryDays', '10'); form.append('EnablePrintAndSign', 'false'); form.append('AutoDetectFields', 'false'); form.append('OnBehalfOf', ''); form.append('EnableSigningOrder', 'false'); form.append('UseTextTags', 'false'); form.append('SendLinkValidTill', ''); form.append('Files', fs.readFileSync('agreement.pdf;type=application/pdf'), 'agreement.pdf;type=application/pdf'); form.append('Title', 'Agreement'); form.append('HideDocumentId', 'false'); form.append('EnableEmbeddedSigning', 'false'); form.append('ExpiryDateType', 'Days'); form.append('ReminderSettings.EnableAutoReminder', 'false'); form.append('ExpiryValue', '60'); form.append('DisableEmails', 'false'); form.append('DisableSMS', 'false'); const response = await axios.post( 'https://api.boldsign.com/v1/document/send', form, { headers: { ...form.getHeaders(), 'accept': 'application/json', 'X-API-KEY': '{your API key}', 'Content-Type': 'multipart/form-data' } } ); ``` {% /codetab %} In the given example, replace the `imageInfo` values with the desired values. Set the field type as `Image` and give supported `allowedFileExtensions` type. Upon executing the provided code, a document will be generated with the specified `imageInfo` values for the `Image` form fields. --- # File: how-to-guides\how-to-set-signer-language.md # How to Set Signer Language for a Document BoldSign supports to set language for signers for better understanding and convenience. This article will guide you on how to set language for signers using the API. You can allow your signers to receive the emails in their preferred language. The currently supported languages are English, German, Spanish, French, Romanian, Norwegian, Bulgarian, Italian, Danish, Polish, Portuguese, Czech, Dutch, Russian, Japanese, Thai, Simplified Chinese, Traditional Chinese, and Swedish. While sending the signature request, all the signer-related transaction emails and signing page static contents will be translated into the signer’s defined language. You can set signer language by setting signer `locale` property and `DocumentInfo` `locale` property. Below are a few code examples demonstrating how to set language for signers. ## Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Signers={ "name": "David", "emailAddress": "david@cubeflakes.com", "formFields": [ { "id": "string", "fieldType": "Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 100, "height": 20 }, "isRequired": true } ], "locale": "PT" }' \ -F 'Files={Your file path}' \ -F 'DocumentInfo[locale]="PT"' \ -F 'Title=Signer language' \ ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "David", "emailAddress": "david@cubeflakes.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "Signature", "type": "FieldType.Signature", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 200, "height": 100 }, "isRequired": True, } ], "locale": "PT" } headers = { 'accept': 'application/json', 'X-API-KEY': '{your API key}' } payload = { 'Signers': json.dumps(signer_data), 'DocumentInfo': json.dumps({ "locale": "PT", "title": "Sample document", "description": "Please sign the document" }), } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); async function GetData(){ try{ const FormData = require('form-data'); const fs = require('fs'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Signers', '{\r\n "name": "David", \r\n "emailAddress": "david@cubeflakes.com",\r\n "signerType": "Signer",\r\n "formFields": [\r\n {\r\n "id": "Signature",\r\n "Type": "FieldType.Signature", \r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 200,\r\n "height": 200\r\n }, \r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "PT"\r\n}'); data.append('Title', "Sample Document node js"); data.append('DocumentInfo', '{\r\n "locale": "PT",\r\n "title": "Sample Document",\r\n "description": "Please sign this"\r\n }'); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', ...data.getHeaders() }, data : data }; const response = await axios.request(config); console.log(JSON.stringify(response.data)); return response.data.documentId; } catch (error) { console.error('Error:', error.message); throw error; // Propagate the error } GetData(); ``` {% /codetab %} Replace the values (Files, Signers, etc.) with the actual values. Set the `Locale` field to your desired language code. Also, provide `DocumentInfo` with the necessary information if you want to send the document in different languages other than EN. Upon execution, the document will be created, and a document ID will be generated. --- # File: how-to-guides\how-to-set-the-default-value-for-form-fields.md # How to Set Prefilled Values for Form Fields BoldSign API makes signing easier by filling in form fields with prefilled values. This saves time for signers as they can quickly review and make any needed edits. ## Supported form fields Prefilled values can be set for the following form field types: 1. Textbox 2. Checkbox 3. Radio button 4. Image 5. Editable Date 6. Dropdown ## Setting prefilled values To set a prefilled value for a form field, you need to specify the value in the `value` property of the corresponding form field object. Here are example codes you can use to do this: ### Code snippet {% codetab %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \ -H 'accept: application/json' \ -H 'X-API-KEY: {your API key}' \ -H 'Content-Type: multipart/form-data' \ -F 'Title="Sample Document"' \ -F 'Signers={ "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": true, "value": "Prefilled Value" } ], "locale": "EN" }' \ -F 'Files={your file}' \ ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{Your API key}"); var documentClient = new DocumentClient(apiClient); var documentFilePath = new DocumentFilePath { ContentType = "application/pdf", FilePath = "{Your File path}" }; var filesToUpload = new List { documentFilePath, }; var TextBoxField = new FormField( id: "TextBox", isRequired: true, value: "Prefilled Value", type: FieldType.TextBox, pageNumber: 1, bounds: new Rectangle(x: 100, y: 100, width: 125, height: 25)); var formFieldCollections = new List() { TextBoxField }; var signer = new DocumentSigner( name: "David", emailAddress: "david@cubeflakes.com", formFields: formFieldCollections, locale: Locales.EN); var documentSigners = new List() { signer }; var sendForSign = new SendForSign() { Signers = documentSigners, Files = filesToUpload, Title = "Sample Document" }; var documentCreated = documentClient.SendDocument(sendForSign); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/document/send" signer_data = { "name": "hanky", "emailAddress": "hankyWhites@gmail.com", "signerType": "Signer", "signerRole": "Signer", "formFields": [ { "id": "TextBox", "name": "TextBox", "fieldType": "TextBox", "pageNumber": 1, "bounds": { "x": 100, "y": 100, "width": 125, "height": 25 }, "isRequired": True, "value": "Prefilled Value" } ], "locale": "EN" } payload = { 'Signers': json.dumps(signer_data), 'Title': "Sample Document" } files = [ ('Files', ('{Your file name}', open('{Your file path}', 'rb'), 'application/pdf')) ] headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API key}' } response = requests.post(url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); let data = new FormData(); data.append('Signers', '{\r\n "name": "hanky",\r\n "emailAddress": "hankyWhites@gmail.com",\r\n "signerType": "Signer",\r\n "signerRole": "Signer",\r\n "formFields": [\r\n {\r\n "id": "TextBox",\r\n "name": "TextBox",\r\n "fieldType": "TextBox",\r\n "pageNumber": 1,\r\n "bounds": {\r\n "x": 100,\r\n "y": 100,\r\n "width": 125,\r\n "height": 25\r\n },\r\n "value": "Prefilled Value",\r\n "isRequired": true\r\n}\r\n ],\r\n "locale": "EN"\r\n}'); data.append('Files', fs.createReadStream('{Your file path}')); data.append('Title', "Sample Document"); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.boldsign.com/v1/document/send', headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API key}', ...data.getHeaders() }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); }); ``` {% /codetab %} In the above example, you have the flexibility to choose any supported field type and set a prefilled value using the `value` property for each field. Upon running the code, a document will be created with the specified values for the form fields. --- # File: how-to-guides\how-to-show-custom-form-fields-using-branding.md # How to Show Custom Form Fields with Branding BoldSign supports displaying custom form fields to users when creating templates or documents with a brand that has custom fields configured. This article will guide you on how to display custom form fields using branding via the API. To display the custom form fields, set `ShowSharedCustomFields` to `true` when updating branding via the API. Below are a few code examples demonstrating how to display custom form fields using branding. ## Code snippet {% codetab %} cURL ```shell curl -X POST 'https://api.boldsign.com/v1/brand/edit?brandId=18779cd3-xxxx-xxxx-883e-4d9ead5c699a' \ -H 'X-API-KEY: {Your API Key}' \ -F 'brandName=BoldSign' \ -F 'brandLogo={Your Brand logo}' \ -F 'backgroundColor=red' \ -F 'buttonColor=green' \ -F 'buttonTextColor=white' \ -F 'emailDisplayName={SenderName} from BoldSign' \ -F 'redirectUrl=https://www.syncfusion.com/' \ -F 'isDefault=true' \ -F 'canHideTagLine=false' \ -F 'combineAuditTrail=true' \ -F 'hideDecline=false' \ -F 'hideSave=false'\ -F 'showBuiltInFormFields=true' \ -F 'allowCustomFieldCreation=true' \ -F 'showSharedCustomFields=true' \ ``` C# ```C# using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var brandingClient = new BrandingClient(apiClient); var editbrand = new BrandSettings() { BrandName = "BoldSign", BrandLogo = new ImageFileBytes() { ContentType = "image/png", FileBytes = File.ReadAllBytes("{Your file path}"), }, BackgroundColor = "red", ButtonColor = "Green", ButtonTextColor = "White", EmailDisplayName = "{SenderName} from BoldSign", RedirectUrl = " https://www.syncfusion.com/ ", IsDefault = true, CanHideTagLine = false, CombineAuditTrail = true, HideDecline = false, HideSave = false, ShowBuiltInFormFields = true, AllowCustomFieldCreation = true, ShowSharedCustomFields = true, }; BrandingData brandingData = await brandingClient.EditBrandAsync("18779cd3-xxxx-xxxx-883e-4d9ead5c699a", editbrand).ConfigureAwait(false); string brandId = brandingData.BrandId; Console.WriteLine(brandId); ``` Python ```python import requests url = "https://api.boldsign.com/v1/brand/edit?brandId=8b115d45-0xxc-4d69-axxc-cfdbb308e095" payload={ 'brandName': '{Your Brand Name}', 'ShowBuiltInFormFields':'true', 'AllowCustomFieldCreation':'true', 'ShowSharedCustomFields':'true', 'emailDisplayName': '{Your email display name}', 'isDefault': 'true', 'canHideTagLine': 'false', 'combineAuditTrail': 'true' files=[ ('brandLogo',('file',open('filepath','rb'),'application/jpg')) ] headers = { 'X-API-KEY': '{Your API Key}' } response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) ``` NodeJS ```js const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('brandName', '{Your brand name}'); form.append('brandLogo', fs.createReadStream('{your file path}')); form.append('emailDisplayName', '{Your email display name}'); form.append('isDefault', 'true'); form.append('canHideTagLine', 'false'); form.append('combineAuditTrail', 'false'); form.append('ShowBuiltInFormFields', 'false'); form.append('ShowSharedCustomFields', 'true'); form.append('AllowCustomFieldCreation', 'true'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/brand/edit', form, { params: { 'brandId': '8b115d45-095c-4xx9-axxc-cfdbb308e095' }, headers: { ...form.getHeaders(), 'X-API-KEY': '{Your API Key}' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; } } GetData(); ``` {% /codetab %} Replace `brandId` with the ID of the existing brand to be used for sending the document. Update `brandname`,`emailDisplayName` and `brandlogo` according to your brand's details. After executing the code, custom form fields will be displayed when a user creates templates or documents using the updated brand. --- # File: how-to-guides\how-to-verify-the-signer-with-Email-OTP-while-making-eSignature-requests.md # How to verify the signer with Email OTP Authentication verifies a signer's identity, enhancing the security of the document signing process. BoldSign offers various authentication methods such as email OTP, SMS OTP, Identity Verification and access code authentication to ensure signers' identities. * **AccessCode** - A unique set of alphanumeric characters specified by the sender, which the recipient must use to access the document. The sender provides this secure code directly to the recipient. * **EmailOTP** - A one-time password generated by the system and sent to the recipient's email address. This password is required to access the document. * **SMSOTP** - A one-time password generated by the system and sent to the recipient's phone number via SMS. This password is required to access the document. * **Identity Verification** - Identity verification is a process used to confirm the signer's identity, which may involve submitting a passport or driver's license. This method offers the highest level of security by thoroughly validating the signer's identity. ## Code snippet The sample code snippets below demonstrates how to add `EmailOTP` authentication to the recipients when sending a document using a template. {% codetab id="codetab1" %} cURL ```shell curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId=d6bad813-xxxx-xxxx-8c9e-e91a96c06392' \ -H 'accept: application/json' \ -H 'X-API-KEY: {Your API Key}' \ -H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \ -d '{ "title": "Sample document", "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richardWhites@gmail.com", "authenticationType": "EmailOTP", "signerType": "Signer", "signerRole": "Manager", "locale": "EN" } ] }' ``` C# ```csharp using BoldSign.Api; using BoldSign.Model; var apiClient = new ApiClient("https://api.boldsign.com", "{Your API Key}"); var templateClient = new TemplateClient(apiClient); var templateRole = new Roles( roleSignerName:"Richard", authenticationType:AuthenticationType.EmailOTP, roleSignerEmailAddress:"richardWhites@gmail.com", roleSignerIndex:1, locale: Locales.EN); var roles = new List { templateRole, }; var sendForSignFromTemplate = new SendForSignFromTemplate() { TemplateId = "d6bad813-xxxx-xxxx-8c9e-e91a96c06392", Roles = roles, }; var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate); Console.WriteLine(documentCreated.DocumentId); ``` Python ```python import requests import json url = "https://api.boldsign.com/v1/template/send?templateId=d6bad813-xxxx-xxxx-8c9e-e91a96c06392" payload = { "message": "Kindly review and sign this.", "roles": [ { "roleIndex": 1, "signerName": "Richard", "signerEmail": "richardWhites@gmail.com", "authenticationType":"EmailOTP" } ] } headers = { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } response = requests.post(url, headers=headers, data=json.dumps(payload)) print(response.text) ``` NodeJS ```js onst axios = require('axios'); async function GetData(){ try{ const response = await axios.post( 'https://api.boldsign.com/v1/template/send', { 'roles': [ { 'roleIndex': 1, 'signerName': 'Richard', 'signerEmail': 'richardWhites@gmail.com', 'authenticationType': 'EmailOTP' }, ], title: "Simple document", message: "Kindly review and sign this.", }, { params: { 'templateId': 'd6bad813-xxxx-xxxx-8c9e-e91a96c06392', }, headers: { 'accept': 'application/json', 'X-API-KEY': '{Your API Key}', 'Content-Type': 'application/json;odata.metadata=minimal;odata.streaming=true' } } ); console.log(JSON.stringify(response.data)); return response; } catch (error) { console.error('Error:', error.message); throw error; }} GetData(); ``` {% /codetab %} In the example above, we have added `EmailOTP` authentication to access the document. Replace `templateId` with the ID of the existing template to be used for sending the document, and update the `SignerEmail` and `SignerName` properties with the email and name of the signer. Once the code is executed, the document from the template will be sent for signature with email OTP authentication. **Note:** For more details on OTP behavior, validity, and resend limits when using Email or SMS OTP for signing, please refer to this article: [OTP limitation and Restriction](https://support.boldsign.com/kb/article/19836/otp-limitations-and-restrictions-in-boldsign) --- # File: how-to-guides\integrate-embedded-signing-in-your-website-or-application.md # How to Embed Signing in Your Web Application Integrating embedded signing into your application allows you to seamlessly incorporate BoldSign's document signing functionalities within your app's user interface. The embedded signing request enables signers to complete the signing process for documents within your website or mobile app by using an iFrame, popup window, or a new tab. Follow these steps to effectively integrate embedded signing into your application: ## 1. Send the document for signing Begin by sending the document to the designated signer. Refer to the documentation {% customlink href="/documents/send-document/" text="Send document" /%} for detailed instructions on how to send a document. This process will return a document ID, which you'll use to generate the embedded signing link. ## 2. Customize UI for embed signing request Design a user interface (UI) within your application that collects the necessary information for the embedded signing request. This information serves as the foundation for signing the document. For instance, you can collect user input for the `signerEmail` parameter. The following code examples demonstrate how to create an embedded sign request: ### Code snippet {% codetab %} cURL ```shell curl -X GET ' https://api.boldsign.com/v1/document/getEmbeddedSignLink?documentId={Your document Id}&signerEmail={signer email} \ -H 'X-API-KEY: {your API key}' ``` C# ```csharp var apiClient = new ApiClient("https://api.boldsign.com", "{your API key}"); var documentClient = new DocumentClient(apiClient); EmbeddedSigningLink embeddedSigningLink = await documentClient.GetEmbeddedSignLinkAsync("{Your document Id}", "{signer email}").ConfigureAwait(false); string signLink = embeddedSigningLink.SignLink; ``` Python ```python import requests url = "https://api.boldsign.com/v1/document/getEmbeddedSignLink?documentId={Your document Id}&signerEmail={signer email}" payload={} headers = { 'X-API-KEY': '{your API key}' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` NodeJS ```js const axios = require('axios'); const response = await axios.get('https://api.boldsign.com/v1/document/getEmbeddedSignLink?documentId={Your document Id}&signerEmail={signer email}', { headers: { 'X-API-KEY': '{your API key}' } }); ``` {% /codetab %} In the provided example, replace the placeholder `signerEmail` with the actual input value gathered from your application's UI. However, parameters like `documentId,` `redirectUrl,` and `signLinkValidTill` should be predefined in your application. {% highlight %}It's essential to verify the signer's identity before granting access to the signing URL. This verification step ensures that the eSignature remains legally binding.{% /highlight %} By executing the provided code, you will generate an embed link that allows the signer to access and sign the document. ## 3. Utilize the generated link in an iFrame With the embed link in hand, seamlessly integrate it into an iFrame element within your application. This iFrame empowers your application users to sign the document directly within your application's interface. This approach significantly streamlines the document signing process for users, enhances their experience, and fosters efficient document management within your application. --- # File: how-to-guides\integrate-the-embedded-requests-in-your-website-or-application.md # Integrate Embedded Requests in Your App ## Introduction Integrating embedded requests into your application allows you to seamlessly incorporate BoldSign's powerful functionalities within your app's user interface. Follow these steps to seamlessly integrate embedded requests into your application ### 1. Identify the functionality Determine the specific BoldSign functionality you want to integrate into your application. Depending on your use case, you can choose to embed different functionalities: - `Embedded Document Creation:` If you want to enable users to create documents from scratch within your application, follow the steps outlined in the {% customlink href="/how-to-guides/embed-the-document-creation-into-your-application/" text="Embedded Document Creation" /%} guide. - `Embedded Template Creation:` If you're looking to allow users to create reusable templates, refer to the {% customlink href="/how-to-guides/embed-the-template-creation-into-your-application/" text="Embedded Template Creation" /%} guide. BoldSign offers support for a range of embedded functionalities including: - Embedded document creation - Embedded document creation from template - Embedded document signing - Embedded template creation - Embedded edit template ### 2. Obtain access and API keys Ensure you have the necessary credentials to authenticate your application with BoldSign's services: - To generate an API key, visit the {% customlink href="https://app.boldsign.com/api-management/api-key/" text="Generate API Key" /%} page. - To create an OAuth app for more advanced integrations, go to {% customlink href="https://app.boldsign.com/api-management/oauth-apps/" text="Create OAuth App" /%}. ### 3. Pass relevant data Facilitate data transfer between your application and the embedded content. This can involve sending user inputs, parameters, and configuration settings to customize the experience. ### 4. Embed the content To integrate the embedded requests into your applications using iFrame, use the following steps: ## Creating an iFrame element ```html