<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BoldSign</title>
    <description>The latest articles on DEV Community by BoldSign (@boldsign).</description>
    <link>https://dev.to/boldsign</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10590%2Fcf28a4e0-7407-49ac-a974-42dcf3c5246a.jpg</url>
      <title>DEV Community: BoldSign</title>
      <link>https://dev.to/boldsign</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boldsign"/>
    <language>en</language>
    <item>
      <title>How to Manage Document Access Across Teams with Custom Permissions</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 12 May 2026 03:43:22 +0000</pubDate>
      <link>https://dev.to/boldsign/how-to-manage-document-access-across-teams-with-custom-permissions-5fpm</link>
      <guid>https://dev.to/boldsign/how-to-manage-document-access-across-teams-with-custom-permissions-5fpm</guid>
      <description>&lt;p&gt;When teams work across departments, document access can become messy fast.&lt;br&gt;&lt;br&gt;
If access is too limited, collaboration slows down. Sales cannot loop in Legal quickly, Finance cannot review deal paperwork, and teams start finding workarounds. If access is too broad, sensitive documents become visible to people who should not see them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://support.boldsign.com/kb/article/42/create-custom-permission" rel="noopener noreferrer"&gt;BoldSign Custom Permissions&lt;/a&gt; help solve both problems. They let Account Admins give specific users or teams access to selected resources and actions without opening up the entire account. That means you can support cross-team work while keeping control over sensitive files.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are custom permissions in BoldSign?
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://support.boldsign.com/kb/article/42/create-custom-permission" rel="noopener noreferrer"&gt;custom permission&lt;/a&gt; let Account Admins override default role-based access and grant or deny specific actions for users or teams.&lt;/p&gt;

&lt;p&gt;By default:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Team Admins can manage resources within their own team&lt;/li&gt;
&lt;li&gt;  Members can manage their own documents and templates&lt;/li&gt;
&lt;li&gt;  Users cannot access documents from other teams unless permission is explicitly granted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Custom Permissions, admins can allow or restrict actions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  View Metadata&lt;/li&gt;
&lt;li&gt;  View Document&lt;/li&gt;
&lt;li&gt;  Edit&lt;/li&gt;
&lt;li&gt;  Delete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it possible to support collaboration across teams without removing existing security boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  How roles work
&lt;/h2&gt;

&lt;p&gt;BoldSign organization accounts support three main roles:&lt;/p&gt;

&lt;h3&gt;
  
  
  Primary Roles and Permissions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Account admin&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Oversees the entire BoldSign account with full control over users, teams, and settings.&lt;/li&gt;
&lt;li&gt;  Create, edit, and delete users and teams.&lt;/li&gt;
&lt;li&gt;  Manage all documents, templates, bulk sends, and links.&lt;/li&gt;
&lt;li&gt;  Grant or revoke Custom Permissions.&lt;/li&gt;
&lt;li&gt;  Track permission history and audit logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Team admin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Manages a specific team or department. Limited by default to that team’s resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Add or remove team members.&lt;/li&gt;
&lt;li&gt;  Create, send, and track documents, templates, and bulk sends within their team.&lt;/li&gt;
&lt;li&gt;  View and edit team-specific reports.&lt;/li&gt;
&lt;li&gt;  Cannot access other teams’ documents without Custom Permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Member&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Standard user with the most restricted access, handling day-to-day eSignature tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Create, send, and manage their own documents and templates.&lt;/li&gt;
&lt;li&gt;  View personal document history and reports.&lt;/li&gt;
&lt;li&gt;  No access to team-wide or cross-team resources unless explicitly granted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more details on account roles and their privileges, check our article on &lt;a href="https://support.boldsign.com/kb/article/19689/account-roles-and-privileges-in-boldsign" rel="noopener noreferrer"&gt;Account roles and privileges in BoldSign&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why custom permissions matter
&lt;/h2&gt;

&lt;p&gt;Custom Permissions are useful when teams need to collaborate without exposing unrelated or sensitive information.&lt;/p&gt;

&lt;p&gt;Common examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Letting Legal review contracts created by Sales&lt;/li&gt;
&lt;li&gt;  Allowing Finance to access selected deal documents without exposing HR files&lt;/li&gt;
&lt;li&gt;  Giving a team member view-only access to templates from another department&lt;/li&gt;
&lt;li&gt;  Blocking a Team Admin from deleting certain completed documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach helps organizations balance collaboration, security, and auditability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What resources can admins control?
&lt;/h2&gt;

&lt;p&gt;Custom Permissions can be applied to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Documents&lt;/li&gt;
&lt;li&gt;  Templates&lt;/li&gt;
&lt;li&gt;  Bulk Links&lt;/li&gt;
&lt;li&gt;  Bulk Sends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Admins can grant or deny access for specific actions depending on the resource and user involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to create a custom permission
&lt;/h2&gt;

&lt;p&gt;Setting up a Custom Permission in BoldSign takes only a few steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Go to Users &amp;amp; Teams from the dashboard.&lt;/li&gt;
&lt;li&gt;  Select Custom Permissions.&lt;/li&gt;
&lt;li&gt;  Click New Custom Permission.&lt;/li&gt;
&lt;li&gt;  Choose the user or users who need access.&lt;/li&gt;
&lt;li&gt;  Select the Entity Type, such as Documents, &lt;a href="https://boldsign.com/electronic-signature-features/templates?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Templates&lt;/a&gt;, &lt;a href="https://boldsign.com/electronic-signature-features/bulk-links?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Bulk Link&lt;/a&gt;, or &lt;a href="https://boldsign.com/electronic-signature-features/bulk-send?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Bulk Send&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Choose the team whose resources should be shared or restricted.&lt;/li&gt;
&lt;li&gt;  Select the actions to allow or deny, such as View Metadata, View Document, Edit, or Delete.&lt;/li&gt;
&lt;li&gt;  Set Access Type to Allow or Deny.&lt;/li&gt;
&lt;li&gt;  Click Save.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to deny access
&lt;/h2&gt;

&lt;p&gt;Admins can also use Custom Permissions to block access.&lt;/p&gt;

&lt;p&gt;For example, if a Team Admin should not be able to delete completed documents created by their team, an Account Admin can create a rule with Access Type = Deny for that action and resource.&lt;br&gt;&lt;br&gt;
This is useful when you want tighter control over sensitive or regulated workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enabling downloads for team documents
&lt;/h2&gt;

&lt;p&gt;One important use case is download access. By default, Account Admins and Team Admins cannot download team documents, Bulk Link files, or Bulk Send documents unless the required permission is enabled. To allow downloads, admins must grant View Document access for the relevant team and resource type. This is useful for archiving, audits, and compliance reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing and tracking permissions
&lt;/h2&gt;

&lt;p&gt;Once Custom Permissions are in place, you can easily monitor and adjust them as your organization’s needs change.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  View history: Back on the Custom Permissions page, use the Filter button to search by user, team, or date. Apply filters to see granted and denied permissions and their history.&lt;/li&gt;
&lt;li&gt;  Edit or delete: Select a permission record and click Edit to modify it, or Delete to revoke it. Deleting a Custom Permission cancels access immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: Elevate your workflow with precision
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://support.boldsign.com/kb/article/42/create-custom-permission" rel="noopener noreferrer"&gt;Custom Permissions&lt;/a&gt; in BoldSign turn rigid role-based defaults into a flexible, dynamic access management system. This enables secure collaboration without exposing unnecessary data. With these tools, Account Admins can block unauthorized access to other teams’ documents while still allowing trusted users to download and edit files where appropriate.&lt;/p&gt;

&lt;p&gt;Ready to get started?&lt;br&gt;&lt;br&gt;
Sign up for &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign’s 30-day free trial&lt;/a&gt; and start using Custom Permissions today. Prefer a walkthrough? &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Schedule a demo&lt;/a&gt; with our team to see Custom Permissions in action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/personalize-your-esignature-requests-with-your-brand-identity/" rel="noopener noreferrer"&gt;Customize Your eSignature Requests with Your Brand Identity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/send-signature-requests-custom-email-domain/" rel="noopener noreferrer"&gt;Send Signature Requests from Your Custom Email Domain&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/esignature-email-customization/" rel="noopener noreferrer"&gt;Customize eSignature Emails in BoldSign for Stronger Brand Identity&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>custompermission</category>
      <category>boldsign</category>
      <category>api</category>
    </item>
    <item>
      <title>How to Retrieve Uploaded Identity Verification Documents via API</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 11 May 2026 04:21:31 +0000</pubDate>
      <link>https://dev.to/boldsign/how-to-retrieve-uploaded-identity-verification-documents-via-api-110</link>
      <guid>https://dev.to/boldsign/how-to-retrieve-uploaded-identity-verification-documents-via-api-110</guid>
      <description>&lt;p&gt;If a signer uploads an ID document during BoldSign identity verification flow, you can later download that same image through the Identity Verification APIs. This is for developers building KYC, onboarding, healthcare, or legal workflows who must access uploaded ID documents, even when automated verification fails. In this guide, you’ll see exactly how to get the fileId from the Identity Verification Report and then use it with the Identity Verification Image API to download the image stream, with code samples in multiple languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is BoldSign identity verification and when is it useful?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developers.boldsign.com/identity-verification/introduction" rel="noopener noreferrer"&gt;BoldSign Identity Verification&lt;/a&gt; is a signer authentication feature that adds an identity check to your eSignature workflows. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Validates whether a signer is who they claim to be before they can access or sign a document.&lt;/li&gt;
&lt;li&gt;  Works with flows where verification requests are delivered via email, SMS, or WhatsApp delivery modes.&lt;/li&gt;
&lt;li&gt;  Lets signers upload government-issued IDs for proof-of-identity checks.&lt;/li&gt;
&lt;li&gt;  Supports both automated verification and manual review.&lt;/li&gt;
&lt;li&gt;  Stores verification data (including images) so senders can retrieve reports and documents later for audits and compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why would you need to download identity verification documents?
&lt;/h2&gt;

&lt;p&gt;You typically want to download uploaded ID images when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Automated verification fails and a human must review the document (glare, blur, cropping, etc.).&lt;/li&gt;
&lt;li&gt;  Your organization must meet KYC/AML or industry-specific regulations.&lt;/li&gt;
&lt;li&gt;  You need to retain ID documents for audits or regulatory reviews.&lt;/li&gt;
&lt;li&gt;  You want to avoid asking signers to re-upload the same document, reducing friction and drop-offs.&lt;/li&gt;
&lt;li&gt;  You must confirm identity before executing high-value or high-risk agreements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Downloading verification images via API keeps identity data inside your controlled systems instead of spreading copies across email chains or screenshots.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you’ll need before calling the identity verification API
&lt;/h2&gt;

&lt;p&gt;Make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign account&lt;/a&gt; (sandbox or production).&lt;/li&gt;
&lt;li&gt;  An &lt;a href="https://developers.boldsign.com/authentication/api-key" rel="noopener noreferrer"&gt;API key&lt;/a&gt; (or &lt;a href="https://developers.boldsign.com/authentication/oauth-2-0" rel="noopener noreferrer"&gt;OAuth2 access token&lt;/a&gt;) to call BoldSign APIs over HTTPS.&lt;/li&gt;
&lt;li&gt;  A REST client such as cURL, Postman, or your preferred HTTP library.&lt;/li&gt;
&lt;li&gt;  The documentId for the document that used identity verification&lt;/li&gt;
&lt;li&gt;  The signer’s identifier used during verification:

&lt;ul&gt;
&lt;li&gt;  Email address, if the verification request was delivered via email, or&lt;/li&gt;
&lt;li&gt;  Country code + phone number, if the request was delivered via SMS or WhatsApp.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Authentication headers should be in one of the following formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  API Key: X-API-KEY: &lt;/li&gt;
&lt;li&gt;  OAuth2: Authorization: Bearer &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which endpoints do you use to retrieve identity documents?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Method + Path&lt;/th&gt;
&lt;th&gt;Key inputs&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Get verification report + fileId&lt;/td&gt;
&lt;td&gt;POST /v1/identityVerification/report&lt;/td&gt;
&lt;td&gt;documentId (query), emailId &lt;strong&gt;or&lt;/strong&gt; countryCode + phoneNumber, order (optional)&lt;/td&gt;
&lt;td&gt;JSON report including fileIds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download uploaded image&lt;/td&gt;
&lt;td&gt;POST /v1/identityVerification/image&lt;/td&gt;
&lt;td&gt;documentId (query), same identifier (emailId &lt;strong&gt;or&lt;/strong&gt; countryCode + phoneNumber), fileId, order (optional)&lt;/td&gt;
&lt;td&gt;Binary image file (stream)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The report gives you the fileId; the image API returns the actual image for that fileId.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you get the fileId from the identity verification report?
&lt;/h2&gt;

&lt;p&gt;When a signer finishes identity verification, whether it succeeds or fails, BoldSign generates an &lt;a href="https://developers.boldsign.com/identity-verification/verification-report" rel="noopener noreferrer"&gt;Identity Verification Report&lt;/a&gt;. This report contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The result of the verification attempt.&lt;/li&gt;
&lt;li&gt;  The timestamp of verification.&lt;/li&gt;
&lt;li&gt;  Extracted document data (name, document type, etc.).&lt;/li&gt;
&lt;li&gt;  One or more file IDs for the associated verification images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of these IDs is the fileId you’ll pass to the Image API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What inputs are required for the report API?
&lt;/h2&gt;

&lt;p&gt;You must provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;documentId&lt;/code&gt; as a query parameter.&lt;/li&gt;
&lt;li&gt;  In the request body, either:

&lt;ul&gt;
&lt;li&gt;  EmailId , or&lt;/li&gt;
&lt;li&gt;  CountryCode and PhoneNumber .&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Delivery Method&lt;/th&gt;
&lt;th&gt;Required Input(s) to the API&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;EmailId&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verification request was delivered to the signer by email.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS&lt;/td&gt;
&lt;td&gt;CountryCode + PhoneNumber&lt;/td&gt;
&lt;td&gt;Signer received the verification request by SMS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp&lt;/td&gt;
&lt;td&gt;CountryCode + PhoneNumber&lt;/td&gt;
&lt;td&gt;WhatsApp uses the signer’s mobile number; therefore treated the same as SMS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email + SMS (either)&lt;/td&gt;
&lt;td&gt;Either one is OK:&lt;br&gt;• EmailId or&lt;br&gt;• CountryCode + PhoneNumber&lt;/td&gt;
&lt;td&gt;Either email or SMS can be used; both are supported, but only one is required.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Optionally, you can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Order: required if signing order is enabled in the document (to specify which signer’s report you want)..&lt;/li&gt;
&lt;li&gt;  OnBehalfOf: if you’re acting on behalf of another sender identity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is an example code snippet showing how to generate a verification report via the API.&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s1"&gt;'https://api.boldsign.com/v1/identityVerification/report?documentId=55a6f0cf-xxx-xxxx-xxxx-796d02cb0977'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {your-api-key}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
        "EmailId": "alex.gayle@cubeflakes.com",
        "Order": 1
    }'&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;c#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.boldsign.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"{your-api-key}"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;idVerificationClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;IdVerificationClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"55a6f0cf-xxx-xxxx-xxxx-796d02cb0977"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;verificationReportRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;VerificationReportRequest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EmailId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"alex.gayle@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Order&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;idVerificationReport&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;idVerificationClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetReport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;verificationReportRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;
    &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;identity_verification_api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;identity_verification_report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;VerificationDataRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="n"&gt;emailId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alex.gayle@cubeflakes.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;countryCode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;+91&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;87654345678&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
           &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DOCUMENT_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; 
        &lt;span class="n"&gt;report_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;identity_verification_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;identity_verification_report&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Configuration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$apiInstance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Api\IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"YOUR_DOCUMENT_ID"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\BoldSign\Model\VerificationDataRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEmailId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"alex.gayle@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setCountryCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"+91"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPhoneNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"9876543210"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$apiInstance&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$verification_report_request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="nc"&gt;ApiClient&lt;/span&gt; &lt;span class="n"&gt;apiClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefaultApiClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setApiKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt; &lt;span class="n"&gt;identityVerificationApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"YOUR_DOCUMENT_ID"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
    &lt;span class="nc"&gt;VerificationDataRequest&lt;/span&gt; &lt;span class="n"&gt;verificationDataRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VerificationDataRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;verificationDataRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEmailId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"alex.gayle@cubeflakes.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;verificationDataRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCountryCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+91"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;verificationDataRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"9944445555"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;IdReport&lt;/span&gt; &lt;span class="n"&gt;verificationReport&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;report&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;verificationDataRequest&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VerificationDataRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;IdentityVerificationApi&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;boldsign&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;data_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VerificationDataRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;data_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emailId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alex.gayle@cubeflakes.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;data_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;+91&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;data_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;23467898765&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_DOCUMENT_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;verification_report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;data_request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How do you download the uploaded identity image with the image API?
&lt;/h2&gt;

&lt;p&gt;Once you have a &lt;strong&gt;fileId&lt;/strong&gt;, you can download the actual ID image through the Identity Verification Image API. The call structure is similar: you supply the same signer identifier (email, SMS or WhatsApp), the same documentId, plus the specific fileId.&lt;/p&gt;

&lt;p&gt;The API then returns the image file as a binary stream, which you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Save to disk or cloud storage.&lt;/li&gt;
&lt;li&gt;  Pipe into an image-processing or document-handling pipeline.&lt;/li&gt;
&lt;li&gt;  Attach to an internal case or ticket for compliance review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What inputs are required for the image API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;documentId&lt;/code&gt; as a query parameter.&lt;/li&gt;
&lt;li&gt;  In the request body:

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;EmailId&lt;/code&gt; or CountryCode + PhoneNumber (matching how verification was delivered).&lt;/li&gt;
&lt;li&gt;  Order – only required if the document has signing order enabled.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;FileId&lt;/code&gt; (from the Identity Verification Report).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Here’s a code snippet showing how to get the uploaded verification document using the API&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="s1"&gt;'https://api.boldsign.com/v1/identityVerification/image?documentId={document Id}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {your-api-key}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--data-raw&lt;/span&gt; &lt;span class="s1"&gt;'{
      "emailId": "alexgayle@cubeflakes.com",
      "order": 1,
      "fileId": "{file Id}"
    }'&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;c#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;           &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.boldsign.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"{your-api-key}"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;idVerificationClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;IdVerificationClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"{document Id}"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;verificationImageRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;VerificationImageRequest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EmailId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"alexgayle@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;FileId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"{file Id}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Order&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;idVerificationImage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;idVerificationClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;verificationImageRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;
    &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;identity_verification_api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;identity_verification_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DownloadImageRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="n"&gt;emailId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alex.gayle@cubeflakes.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;countryCode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;+91&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;87654345678&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;fileId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FILE_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DOCUMENT_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; 
        &lt;span class="n"&gt;image_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;identity_verification_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;identity_verification_image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Configuration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$apiInstance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Api\IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"YOUR_DOCUMENT_ID"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\BoldSign\Model\DownloadImageRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEmailId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"alex.gayle@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setCountryCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"+91"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPhoneNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"9876543210"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFileId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_FILE_ID"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$image_request&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$apiInstance&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$image_request&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="nc"&gt;ApiClient&lt;/span&gt; &lt;span class="n"&gt;apiClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefaultApiClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setApiKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;        
    &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt; &lt;span class="n"&gt;identityVerificationApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"YOUR_DOCUMENT_ID"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
    &lt;span class="nc"&gt;DownloadImageRequest&lt;/span&gt; &lt;span class="n"&gt;downloadImageRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DownloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;downloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEmailId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"alex.gayle@cubeflakes.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;downloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCountryCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+91"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;downloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"9944445555"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;downloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFileId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_FILE_ID"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;verificationimage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;downloadImageRequest&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DownloadImageRequest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;boldsign&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IdentityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;image_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DownloadImageRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;image_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emailId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alex.gayle@cubeflakes.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;image_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;+91&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;image_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;23467898765&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;image_request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_FILE_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_DOCUMENT_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;verification_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;identityVerificationApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;image_request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How can this workflow help in real-world scenarios?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How can compliance teams manually review failed verifications?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Scenario: A bank requires ID verification to open accounts. A customer’s automated verification fails because the ID photo is blurry.&lt;/li&gt;
&lt;li&gt;  Problem: Most systems don’t expose failed verification images, so the customer has to start over.&lt;/li&gt;
&lt;li&gt;  Solution: The compliance team calls the Report API to get the &lt;strong&gt;fileId&lt;/strong&gt;, then downloads the ID image through the Image API, manually confirms identity, and approves the account without asking for a new upload.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How can law firms confirm remote signer identity?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Scenario: A law firm needs to verify a remote client’s identity before they sign a high-value contract.&lt;/li&gt;
&lt;li&gt;  Problem: Automated verification flags the passport as low confidence.&lt;/li&gt;
&lt;li&gt;  Solution: The firm uses the Image API to retrieve the uploaded passport, manually validates it, and proceeds with the contract while keeping a verifiable audit trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How can healthcare portals grant access without re-uploads?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Scenario: A hospital uses identity verification before granting access to a patient portal. A patient’s driver’s license fails automated checks.&lt;/li&gt;
&lt;li&gt;  Problem: Re-upload requests slow down care and frustrate patients.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Staff download the previously uploaded license image via the API, review it, and grant portal access while following internal compliance policies&lt;/p&gt;

&lt;h2&gt;
  
  
  How does this improve compliance and manual verification workflows?
&lt;/h2&gt;

&lt;p&gt;Using the Identity Verification Report + Image APIs together helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Access uploaded ID images regardless of verification outcome (success or failure).&lt;/li&gt;
&lt;li&gt;  Reduce friction by enabling manual validation without forcing repeated document uploads.&lt;/li&gt;
&lt;li&gt;  Maintain a complete audit trail for regulators and internal reviews.&lt;/li&gt;
&lt;li&gt;  Align with requirements like KYC, AML, and healthcare privacy rules by centralizing identity evidence.&lt;/li&gt;
&lt;li&gt;  Integrate identity data into your CRM, onboarding flows, ticketing systems, or risk engines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compliance Reminder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Identity documents are highly sensitive. Ensure your storage, logging, and access control follow your organization’s security standards and any applicable regulations (such as GDPR, HIPAA, and local KYC/AML rules).&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you do next with the BoldSign identity verification APIs?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Enable identity verification&lt;/strong&gt; for high-risk or regulated workflows in BoldSign.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Integrate the Identity Verification Report API&lt;/strong&gt; to capture verification results and &lt;strong&gt;fileId&lt;/strong&gt; after each attempt.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Add the Identity Verification Image API&lt;/strong&gt; to download and store ID images whenever manual review is needed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Automate routing&lt;/strong&gt; of failed verifications (and their images) to compliance or risk queues.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can prototype everything in a &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;sandbox account&lt;/a&gt; and then move the same code to production once your flows are validated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: When should you use the BoldSign identity verification API?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developers.boldsign.com/how-to-guides/get-the-uploaded-identity-verification-document" rel="noopener noreferrer"&gt;BoldSign Identity Verification API&lt;/a&gt; makes it easy to securely retrieve uploaded identity documents, whether verification succeeds or not. Whether you’re building onboarding flows, automating compliance checks, or integrating identity data into internal systems, the API helps you maintain trust, meet regulatory standards, and streamline operations with minimal effort.&lt;/p&gt;

&lt;p&gt;Get started today! Sign up for a &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;free sandbox account&lt;/a&gt; to explore our API features. You can also connect with our support team anytime through the &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/edit-document-api/" rel="noopener noreferrer"&gt;BoldSign Edit Document API: Update Signers, Fields, and Files Without Restarting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/aspnet-core-minimal-apis-best-practices/" rel="noopener noreferrer"&gt;ASP.NET Core Minimal APIs: When to Use Them and When Not To Use Them&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/migrate-your-docusign-api-to-boldsign-using-ai-skills/" rel="noopener noreferrer"&gt;Migrate Your Docusign API to BoldSign Using AI Skills – Without Breaking Production&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>identityverification</category>
      <category>api</category>
      <category>documents</category>
    </item>
    <item>
      <title>Why Medical Records Requests Get Delayed and How to Fix It</title>
      <dc:creator>Rachel Atieno</dc:creator>
      <pubDate>Fri, 08 May 2026 13:01:56 +0000</pubDate>
      <link>https://dev.to/boldsign/why-medical-records-requests-get-delayed-and-how-to-fix-it-17kn</link>
      <guid>https://dev.to/boldsign/why-medical-records-requests-get-delayed-and-how-to-fix-it-17kn</guid>
      <description>&lt;p&gt;Medical records requests get delayed most often because forms are incomplete, signatures are missing, identity checks take time, and paper-based workflows are hard to track. A faster approach is to digitize requests &lt;a href="https://boldsign.com/hipaa-overview?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;with HIPAA compliant eSignatures&lt;/a&gt;, reusable templates, automated reminders, identity verification, real-time tracking, and audit trails. &lt;/p&gt;

&lt;p&gt;This guide explains the medical records request process, the biggest causes of delays and compliance risk, and how BoldSign helps healthcare teams reduce errors and deliver records faster. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where medical records requests usually break down
&lt;/h2&gt;

&lt;p&gt;Traditional release workflows often look manageable on paper, but in practice they create friction at multiple points.&lt;/p&gt;

&lt;p&gt;The most common issues include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Slow processing caused by manual handoffs and backlogs&lt;/li&gt;
&lt;li&gt;  Incomplete or missing signatures that require repeated follow-up&lt;/li&gt;
&lt;li&gt;  Paperwork errors from handwritten or repeatedly entered information&lt;/li&gt;
&lt;li&gt;  Unclear request status once forms start moving between teams&lt;/li&gt;
&lt;li&gt;  Compliance risks when communications or document handling are inconsistent&lt;/li&gt;
&lt;li&gt;  Lost or misrouted requests caused by paper-based processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these problems are unusual on their own. Together, they create a slow and error-prone system that makes records requests harder to manage than they should be.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a reliable medical records request process should look like
&lt;/h2&gt;

&lt;p&gt;A secure medical records request process usually follows a clear sequence.&lt;/p&gt;

&lt;p&gt;First, the patient or authorized party submits a request form that includes the records needed, the purpose of release, recipient details, and the preferred delivery method. Then the provider verifies identity and authorization, reviews the request for completeness, retrieves the necessary records, prepares them for release, and delivers them through a compliant channel. The original draft lays out this process clearly, including identity checks, provider review, retrieval, release preparation, and final delivery.&lt;/p&gt;

&lt;p&gt;That workflow is straightforward in theory. The problem is that many teams are still managing it with disconnected steps, manual reviews, and paper forms that leave too much room for delay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why digital workflows work better
&lt;/h2&gt;

&lt;p&gt;The biggest advantage of digitizing medical records requests is not just speed. It is consistency.&lt;br&gt;&lt;br&gt;
Digital workflows make it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Standardize request and authorization forms&lt;/li&gt;
&lt;li&gt;  Reduce missing fields and incomplete submissions&lt;/li&gt;
&lt;li&gt;  Track request status in real time&lt;/li&gt;
&lt;li&gt;  Route documents to the right people in the right order&lt;/li&gt;
&lt;li&gt;  Keep a secure activity history for compliance review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The original draft also compares digital and paper forms across accessibility, speed, storage, error reduction, tracking, and security. That comparison supports the same conclusion: digital workflows reduce delays by improving visibility, accuracy, and control.&lt;/p&gt;

&lt;h2&gt;
  
  
  How BoldSign helps reduce delays and errors
&lt;/h2&gt;

&lt;p&gt;BoldSign fits this workflow because it addresses the exact points where medical records requests tend to slow down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Templates for release and authorization forms 
&lt;/h3&gt;

&lt;p&gt;Healthcare teams can create reusable release, authorization, and consent forms so every request starts from a consistent format. That helps reduce missing information and lowers the chance of avoidable mistakes. The draft calls out &lt;a href="https://boldsign.com/electronic-signature-features/templates?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;templates&lt;/a&gt; as a way to improve consistency and reduce incorrect or incomplete information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kj0vcs03l5rnhijbwz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kj0vcs03l5rnhijbwz4.png" alt="Create new template" width="800" height="393"&gt;&lt;/a&gt;Create new template&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated reminders 
&lt;/h3&gt;

&lt;p&gt;When signatures or reviews are delayed, reminders help keep requests from stalling. This reduces the need for staff to chase patients or internal stakeholders manually. The original draft includes &lt;a href="https://support.boldsign.com/kb/article/319/how-to-configure-auto-reminder-for-a-document?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;automated reminders&lt;/a&gt; specifically as a way to prevent stalled requests and reduce follow-ups.&lt;/p&gt;

&lt;p&gt;Send &lt;a href="https://support.boldsign.com/kb/article/319/how-to-configure-auto-reminder-for-a-document?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;automatic follow‑ups&lt;/a&gt; to patients and internal reviewers to prevent stalled requests and reduce manual follow‑ups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatw9yfxdn2d5qc25o5oc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatw9yfxdn2d5qc25o5oc.png" alt="Automate reminders" width="757" height="445"&gt;&lt;/a&gt;Automate reminders&lt;/p&gt;

&lt;h3&gt;
  
  
  Role-based routing 
&lt;/h3&gt;

&lt;p&gt;Medical records requests often involve more than one step or reviewer. BoldSign helps route each request to the right people in the right order, which reduces handoff errors and makes the process easier to manage. The draft explicitly maps this to patient/requester, reviewer, and approver roles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2x3fevhpeayaiquwee4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2x3fevhpeayaiquwee4.png" alt="Role-based routing" width="716" height="242"&gt;&lt;/a&gt;Role-based routing&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time tracking 
&lt;/h3&gt;

&lt;p&gt;When staff can see where a request stands, they can identify bottlenecks faster and avoid the “where is this request now?” problem that slows teams down. The original version positions tracking as a way to monitor request status from sent to completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe5h65ox1u6mt8fjxqh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe5h65ox1u6mt8fjxqh6.png" alt="Real-time tracking" width="718" height="324"&gt;&lt;/a&gt;Real-time tracking&lt;/p&gt;

&lt;h3&gt;
  
  
  Secure audit trail
&lt;/h3&gt;

&lt;p&gt;In healthcare, it is not enough to complete a process, teams also need a clear record of what happened. BoldSign’s &lt;a href="https://support.boldsign.com/kb/article/14647/information-the-audit-trail-document-contains?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;audit trail&lt;/a&gt; supports compliance reviews by showing when documents were viewed, signed, and completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbzwuhqy5paqwc13cgjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbzwuhqy5paqwc13cgjr.png" alt="Audit trail" width="800" height="511"&gt;&lt;/a&gt;Audit trail&lt;/p&gt;

&lt;h3&gt;
  
  
  Identity verification and secure access
&lt;/h3&gt;

&lt;p&gt;The draft also highlights identity verification, encrypted workflows, access controls, and the ability for patients to sign without creating an account. These features matter in a healthcare context because they improve security without adding unnecessary friction for patients.&lt;/p&gt;

&lt;h3&gt;
  
  
  HIPAA compliant eSignature workflow  
&lt;/h3&gt;

&lt;p&gt;Handle sensitive medical records and PHI using HIPAA‑compliant, encrypted eSignature workflows with access controls designed for healthcare use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Branded patient experience  
&lt;/h3&gt;

&lt;p&gt;Create a consistent and professional signing experience with &lt;a href="https://boldsign.com/electronic-signature-features/branding?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;custom branding&lt;/a&gt; across emails and signing pages, helping patients recognize your organization and complete forms with confidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpbw0s7501e5m7rytrnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpbw0s7501e5m7rytrnh.png" alt="Branding" width="800" height="364"&gt;&lt;/a&gt;Branding&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for healthcare teams
&lt;/h2&gt;

&lt;p&gt;Medical records requests are not just administrative tasks. They are part of a regulated process that has to be both efficient and defensible.&lt;/p&gt;

&lt;p&gt;When forms are incomplete, signatures are delayed, or requests are hard to track, the result is not just slower turnaround. It also creates more work for staff and increases the chance of compliance mistakes. The original draft repeatedly ties delays to incomplete submissions, paper handling, misrouting, and weak tracking, all of which are exactly the kinds of issues healthcare teams need to reduce.&lt;/p&gt;

&lt;p&gt;That is why a better records request workflow should do more than digitize a form. It should reduce friction across the whole request lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Digital vs paper forms in medical records requests  
&lt;/h2&gt;

&lt;p&gt;Digitizing forms reduces delays, improves tracking, and lowers the risk of lost paperwork.  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comparison point&lt;/th&gt;
&lt;th&gt;Digital forms&lt;/th&gt;
&lt;th&gt;Paper forms&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;Accessible anywhere on supported devices&lt;/td&gt;
&lt;td&gt;Requires physical handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Faster distribution and completion&lt;/td&gt;
&lt;td&gt;Slower handoffs and processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Easy centralized storage&lt;/td&gt;
&lt;td&gt;Requires physical storage space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error reduction&lt;/td&gt;
&lt;td&gt;Can reduce incomplete submissions&lt;/td&gt;
&lt;td&gt;Higher risk of missing fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tracking&lt;/td&gt;
&lt;td&gt;Status visibility and activity history&lt;/td&gt;
&lt;td&gt;Hard to track progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Secure handling with controls&lt;/td&gt;
&lt;td&gt;Vulnerable to loss or damage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Digital workflows reduce delays by improving visibility, accuracy, and control.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion  
&lt;/h2&gt;

&lt;p&gt;The medical records request process does not have to be slow or stressful. By replacing paper-based steps with a digital workflow, healthcare teams can reduce missing signatures, avoid lost requests, and improve turnaround times. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://boldsign.com/hipaa-overview?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;With BoldSign’s HIPAA compliant eSignature tools&lt;/a&gt;, templates, reminders, identity verification, tracking, and audit trails, providers can deliver records faster while maintaining a secure and traceable workflow. &lt;/p&gt;

&lt;p&gt;If you’re not yet a BoldSign user, &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;start a free trial&lt;/a&gt; to explore these capabilities, or &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;schedule a demo&lt;/a&gt; for a walkthrough. &lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/esignatures-for-healthcare-digitizing-medical-records/" rel="noopener noreferrer"&gt;Digitizing Medical Records: Secure and HIPAA-Compliant eSignatures for Healthcare Providers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/merge-pdf-free-for-medical-professionals/" rel="noopener noreferrer"&gt;Free PDF Merging Tool by BoldSign for Medical Professionals &lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>health</category>
      <category>boldsign</category>
      <category>api</category>
    </item>
    <item>
      <title>Migrate Your Docusign API to BoldSign Using AI Skills – Without Breaking Production</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Fri, 08 May 2026 03:46:20 +0000</pubDate>
      <link>https://dev.to/boldsign/migrate-your-docusign-api-to-boldsign-using-ai-skills-without-breaking-production-1pi7</link>
      <guid>https://dev.to/boldsign/migrate-your-docusign-api-to-boldsign-using-ai-skills-without-breaking-production-1pi7</guid>
      <description>&lt;p&gt;&lt;strong&gt;The real problem is not switching platforms. It is switching safely.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are running Docusign in production today, you already know migration is not a weekend project. Your codebase does not just call Docusign. It relies on a connected set of behaviors such as signing flows, template and field mappings, webhook based status updates, and downstream logic triggered by document lifecycle events.&lt;/p&gt;

&lt;p&gt;If any of those behaviors change during migration, problems can surface quietly. Signatures may be delayed. Webhook handlers may stop firing. Downstream systems may receive events they do not recognize.&lt;/p&gt;

&lt;p&gt;The challenge was never “can we build a BoldSign integration?” It’s “can we replace Docusign without disrupting what already works?”&lt;/p&gt;

&lt;p&gt;That is exactly what the &lt;strong&gt;Docusign to BoldSign Migration Skill&lt;/strong&gt; is designed to help with. In this blog post, we will walk through how it supports a safer migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why teams are migrating now
&lt;/h2&gt;

&lt;p&gt;Docusign’s pricing has become a growing concern for teams, especially for API driven workflows. While it often comes down to per document or per envelope usage, the total cost is commonly shaped by plan tiers, feature gates, and usage thresholds. As document volume grows across multiple workflows and environments, those constraints can push costs up faster than many teams expect.&lt;/p&gt;

&lt;p&gt;BoldSign also follows a per document style pricing model, but with a structure that is typically easier to forecast as automation scales. Limits and overages can still apply, but teams often evaluate BoldSign because the pricing tends to be more predictable and, in many cases, lower than Docusign for comparable API driven usage. BoldSign also provides &lt;a href="https://developers.boldsign.com/sdks/overview/?region=us" rel="noopener noreferrer"&gt;SDKs&lt;/a&gt; for .NET, Node.js, Python, Java, and PHP.&lt;/p&gt;

&lt;p&gt;For teams evaluating broader tradeoffs, BoldSign provides a detailed comparison of API models, pricing, and capabilities in its &lt;a href="https://boldsign.com/alternatives/docusign-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Docusign API alternative&lt;/a&gt; overview.&lt;/p&gt;

&lt;p&gt;But cost alone doesn’t justify the risk of migrating a production integration. What justifies it is having a reliable, repeatable process, and that’s where AI Agent Skills come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration goal: Behavior parity, not reinvention
&lt;/h2&gt;

&lt;p&gt;The goal of this migration is not to redesign workflows or introduce new architecture. The goal is to preserve existing behavior.&lt;/p&gt;

&lt;p&gt;If a document triggered specific lifecycle events before migration, it should trigger the same events afterward. Downstream systems should continue to receive the same signals, in the same order, with no changes required.&lt;/p&gt;

&lt;p&gt;A successful migration is one where users notice no difference and only the underlying platform has changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a specialized migration skill is needed
&lt;/h2&gt;

&lt;p&gt;If you’re using AI coding agents like Claude Code, GitHub Copilot, OpenAI Codex, Cursor, or any of the 16+ tools that now support the SKILL.md standard, you’ve probably noticed a pattern: AI agents are great at generating code, but they struggle with platform-specific nuances.&lt;/p&gt;

&lt;p&gt;Ask an AI agent to “migrate this Docusign code to BoldSign” without context, and you’ll get code that compiles but breaks in production. Common failures include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Treating document sending as synchronous&lt;/strong&gt;. BoldSign’s SendDocument returns a DocumentId immediately, but the document isn’t sent yet. You must use webhook events to track completion.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Missing webhook verification&lt;/strong&gt;. The agent generates a webhook handler but skips signature validation entirely.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Wrong field mappings&lt;/strong&gt;. Docusign calls them “tabs.” BoldSign calls them “form fields.” The mapping isn’t one-to-one, and the agent guesses wrong.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Polling instead of webhooks&lt;/strong&gt;. The agent defaults to polling for status, which burns through rate limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Migration Skill prevents all of these by encoding the correct mappings, lifecycle behaviors, and platform rules directly into the agent’s context. Think of it as giving the AI the complete senior developer onboarding guide before it writes a single line of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common migration mistakes the skill prevents
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mistake&lt;/th&gt;
&lt;th&gt;What Happens&lt;/th&gt;
&lt;th&gt;How the Migration Skill Helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Treating SendDocument as synchronous&lt;/td&gt;
&lt;td&gt;Code waits for completion that never occurs, leading to timeouts in production&lt;/td&gt;
&lt;td&gt;Ensures completion is always tracked via webhook events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polling for document status&lt;/td&gt;
&lt;td&gt;Rapidly consumes API rate limits in sandbox and production&lt;/td&gt;
&lt;td&gt;Enforces an event‑driven lifecycle model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skipping webhook signature verification&lt;/td&gt;
&lt;td&gt;Webhook endpoint becomes vulnerable to spoofed events&lt;/td&gt;
&lt;td&gt;Requires HMAC SHA256 verification for all webhook handlers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Using application/json for file uploads&lt;/td&gt;
&lt;td&gt;API rejects uploads and document sending fails&lt;/td&gt;
&lt;td&gt;Enforces multipart form‑data for all file operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assuming audit logs are included with documents&lt;/td&gt;
&lt;td&gt;Compliance data is missing or not stored&lt;/td&gt;
&lt;td&gt;Generates a separate audit log retrieval call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardcoding API endpoints&lt;/td&gt;
&lt;td&gt;Deployment breaks for EU or regional environments&lt;/td&gt;
&lt;td&gt;Selects the correct regional API endpoint automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Anatomy of the Docusign to BoldSign migration Skill
&lt;/h2&gt;

&lt;p&gt;The skill is intentionally minimal and focused.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    docusign-to-boldsign-api-migration/ 
    ├── README.md 
    └── BoldSign/ 
        └── SKILL.md 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Everything important is defined inside &lt;a href="https://github.com/boldsign/docusign-to-boldsign-api-migration/blob/main/BoldSign/SKILL.md" rel="noopener noreferrer"&gt;SKILL.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Object mappings such as envelopes to documents, tabs to form fields, and recipients to signers&lt;/li&gt;
&lt;li&gt;  Behavior guarantees that must remain unchanged&lt;/li&gt;
&lt;li&gt;  Assumptions that no longer apply after migration such as synchronous sends or polling&lt;/li&gt;
&lt;li&gt;  Correct webhook usage and lifecycle handling patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before generating any migration code, the AI agent reads this file and applies its constraints, ensuring production-safe output rather than guessed implementations.&lt;/p&gt;
&lt;h2&gt;
  
  
  Popular AI coding agents that support skill
&lt;/h2&gt;

&lt;p&gt;Many modern AI coding agents allow developers to load external context folders such as the BoldSign Skill, so the agent can generate accurate, .NET SDK aligned integration code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.syncfusion.com/code-studio/" rel="noopener noreferrer"&gt;Syncfusion Code Studio&lt;/a&gt; - AI code editor / IDE for enterprise app development.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://code.claude.com/docs/en/overview" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; - Anthropic’s AI coding agent for terminal, IDE, desktop, and browser.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; - AI-first code editor.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.github.com/en/copilot/concepts/agents/cloud-agent/about-cloud-agent" rel="noopener noreferrer"&gt;GitHub Copilot Coding Agent&lt;/a&gt;– GitHub’s coding agent for project tasks and fixes.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.openai.com/codex" rel="noopener noreferrer"&gt;OpenAI Codex&lt;/a&gt; - OpenAI’s AI coding partner / agent platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this blog post, we demonstrate the migration using Syncfusion Code Studio with the Claude model. &lt;/p&gt;
&lt;h2&gt;
  
  
  Getting started with the migration skill
&lt;/h2&gt;

&lt;p&gt;Using the BoldSign Skill in Code Studio is straightforward. Here’s the process:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Obtain the skill&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clone or download the &lt;a href="https://github.com/boldsign/docusign-to-boldsign-api-migration" rel="noopener noreferrer"&gt;Docusign to BoldSign API Migration GitHub repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Place it in your skills directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Place the folder in /.codestudio/skills/. Once placed here, the Skill becomes available whenever Docusign to BoldSign migration context is detected. &lt;/p&gt;


  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezwikstciogg8s1tu1xz.png" alt="Code Studio Dashboard View" width="800" height="426"&gt;Code Studio Dashboard View


&lt;p&gt;*&lt;strong&gt;&lt;em&gt;Step 3: Select your AI model&lt;/em&gt;&lt;/strong&gt;*  &lt;/p&gt;

&lt;p&gt;Open the model selector at the bottom of Code Studio and choose the model you want to use.&lt;/p&gt;


  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F997p9qus3bll32rxh0yc.png" alt="AI Model Selection for Code Studio" width="800" height="426"&gt;AI Model Selection for Code Studio


&lt;p&gt;*&lt;strong&gt;&lt;em&gt;Step 4: Prompt the agent&lt;/em&gt;&lt;/strong&gt;* &lt;/p&gt;

&lt;p&gt;Provide your existing Docusign .NET code and prompt: &lt;/p&gt;

&lt;p&gt;“Using the skill, convert this Docusign .NET implementation to BoldSign while preserving functionality.” &lt;/p&gt;


  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sp1bhaolh5wlbx9potg.png" alt="Prompt Input for Executing Request" width="800" height="426"&gt;Prompt Input for Executing Request


&lt;p&gt;The agent will: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Analyze the existing Docusign logic &lt;/li&gt;
&lt;li&gt;  Apply the mappings defined in the skill &lt;/li&gt;
&lt;li&gt;  Generate equivalent BoldSign .NET SDK code &lt;/li&gt;
&lt;li&gt;  Preserve asynchronous lifecycle behavior &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key example: Sending a document&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;This example shows how a common Docusign envelope workflow translates cleanly to BoldSign while preserving behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docusign .NET Example&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Docusign.eSign.Api&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Docusign.eSign.Client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nn"&gt;Docusign.eSign.Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 1. Setup client  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://demo.Docusign.net/restapi"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultHeader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Bearer "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;envelopesApi&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;EnvelopesApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 2. Create document  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;DocumentBase64&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Convert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToBase64String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"contract.pdf"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Contract.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FileExtension&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 3. Create signer with tabs  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"john@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"John Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RecipientId&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RoutingOrder&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Tabs&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Tabs&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SignHereTabs&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SignHere&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;  &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;SignHere&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;XPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"100"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;YPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"200"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DateSignedTabs&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DateSigned&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;DateSigned&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;XPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;YPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"200"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;        &lt;/span&gt;&lt;span class="n"&gt;TextTabs&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;XPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"100"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;YPosition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;                &lt;/span&gt;&lt;span class="n"&gt;TabLabel&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"company_name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;               &lt;/span&gt; &lt;span class="n"&gt;Required&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;           &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;  &lt;/span&gt; 
    &lt;span class="c1"&gt;// 4. Build and send envelope  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;envelopeDefinition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;EnvelopeDefinition&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EmailSubject&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Please sign this document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EmailBlurb&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Please review and sign."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Documents&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Recipients&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Recipients&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;       &lt;/span&gt; &lt;span class="n"&gt;Signers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sent"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="c1"&gt;// "sent" sends immediately; "created" saves as draft  &lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;envelopesApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateEnvelope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;accountId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;envelopeDefinition&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Envelope ID: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnvelopeId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;BoldSign .NET Equivalent&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nn"&gt;BoldSign.Api&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nn"&gt;BoldSign.Model&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 1. Setup client — much simpler  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.boldsign.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"BOLDSIGN_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;documentClient&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;DocumentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 2. Load file as stream (not Base64)  &lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OpenRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"contract.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;documentFile&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;DocumentFileStream&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ContentType&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"application/pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FileData&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FileName&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"contract.pdf"&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 3. Create form fields (equivalent to Docusign tabs)  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Bounds&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IsRequired&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;dateSignedField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DateSigned&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Bounds&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"company_name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Textbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PageNumber&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Bounds&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IsRequired&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// 4. Create signer (with form fields attached to the signer)  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nf"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"John Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;emailAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"john@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;signerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;SignerType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;    &lt;/span&gt;&lt;span class="n"&gt;formFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;dateSignedField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;  &lt;/span&gt; 
    &lt;span class="c1"&gt;// 5. Build and send  &lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;sendRequest&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;SendForSign&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Please sign this document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Please review and sign."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Signers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="n"&gt;Files&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IDocumentFile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;documentFile&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="c1"&gt;// ExpiryDays = 30,  &lt;/span&gt;
    &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="c1"&gt;// EnableSigningOrder = true  // For sequential signing  &lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;documentClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sendRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Document ID: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
    &lt;span class="c1"&gt;// NOTE: Document send is ASYNC — listen for Sent/SendFailed webhooks   &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Document sending in BoldSign is asynchronous. Completion must be tracked using webhooks, not polling or blocking logic. &lt;/p&gt;

&lt;p&gt;In the above example, the document send logic maps cleanly from Docusign to BoldSign using equivalent SDK calls. Core workflow intent remains unchanged, while platform-specific differences are handled automatically by the Migration Skill. &lt;/p&gt;

&lt;h2&gt;
  
  
  What the skill handles during migration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Converts OAuth-based Docusign flows&lt;/li&gt;
&lt;li&gt;  Supports BoldSign API key or OAuth&lt;/li&gt;
&lt;li&gt;  Prevents hardcoded credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Signing behavior&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Preserves signing order&lt;/li&gt;
&lt;li&gt;  Enforces required fields&lt;/li&gt;
&lt;li&gt;  Supports template-based and coordinate-based workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Embedded signing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Preserves iframe-based flows&lt;/li&gt;
&lt;li&gt;  Maintains redirect and expiry behavior&lt;/li&gt;
&lt;li&gt;  Ensures access controls remain unchanged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Document retrieval and audit trails&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reliable signed document retrieval&lt;/li&gt;
&lt;li&gt;  Explicit audit trail APIs&lt;/li&gt;
&lt;li&gt;  Compliance workflows preserved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Webhooks and lifecycle tracking&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Event-driven lifecycle handling&lt;/li&gt;
&lt;li&gt;  HMAC SHA256 verification enforced&lt;/li&gt;
&lt;li&gt;  Correct handling of Sent, Viewed, Signed, Completed, Declined, Expired, and failure events&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The five-step recommended migration approach 
&lt;/h2&gt;

&lt;p&gt;Don’t migrate everything at once. Each step should be verified independently before moving forward. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Basic document send&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Migrate a single document send flow. Verify delivery, field placement, and signer access. Use BoldSign’s sandbox environment for all testing. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Webhook lifecycle tracking&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Configure HMAC verified webhooks. Confirm that lifecycle events are processed correctly.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Embedded signing&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Migrate iframe based signing. Validate link generation, redirects, and signing experience.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Templates and advanced fields&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Migrate template workflows. Validate field mappings, defaults, and validation rules.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Multisigner and advanced workflows&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Extend to sequential and parallel signing, reminders, revocation, and signer authentication. &lt;/p&gt;

&lt;h2&gt;
  
  
  Supported migration workflows
&lt;/h2&gt;

&lt;p&gt;The Migration Skill supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Single and multi-signer workflows&lt;/li&gt;
&lt;li&gt;  Sequential and parallel signing&lt;/li&gt;
&lt;li&gt;  Embedded signing for SaaS applications&lt;/li&gt;
&lt;li&gt;  Template-based document sending&lt;/li&gt;
&lt;li&gt;  Bulk send operations&lt;/li&gt;
&lt;li&gt;  Full lifecycle tracking via webhooks&lt;/li&gt;
&lt;li&gt;  Signed document and audit trail retrieval&lt;/li&gt;
&lt;li&gt;  Reminder, revoke, and delete operations&lt;/li&gt;
&lt;li&gt;  OTP, access code, and identity verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All migrations target behavior parity. The goal is to achieve identical functionality on a different platform, not to redesign existing workflows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;Migrating from Docusign does not require rebuilding your system.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;BoldSign’s Docusign to BoldSign Migration Skill&lt;/strong&gt;, teams can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Preserve existing workflows&lt;/li&gt;
&lt;li&gt;  Reduce migration risk&lt;/li&gt;
&lt;li&gt;  Maintain webhook and lifecycle behavior&lt;/li&gt;
&lt;li&gt;  Transition safely without disrupting production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with a single workflow. Validate it thoroughly from end to end. Then expand with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Explore the &lt;a href="https://github.com/boldsign/docusign-to-boldsign-api-migration" rel="noopener noreferrer"&gt;Docusign to BoldSign Migration Skill&lt;/a&gt; on GitHub&lt;/li&gt;
&lt;li&gt;  Create a free &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign Sandbox&lt;/a&gt; account&lt;/li&gt;
&lt;li&gt;  Review available APIs and SDKs in the &lt;a href="https://developers.boldsign.com/api-overview/getting-started/?region=us" rel="noopener noreferrer"&gt;BoldSign Developer Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are building new workflows, the &lt;a href="https://github.com/boldsign/boldsign-esignature-skills" rel="noopener noreferrer"&gt;BoldSign eSignature Skill&lt;/a&gt; for new integrations provides a strong foundation. Existing Docusign templates can also be migrated easily using the &lt;a href="https://support.boldsign.com/kb/article/16442/how-to-import-docusign-templates-into-boldsign" rel="noopener noreferrer"&gt;Import Docusign Templates into BoldSign&lt;/a&gt; guide.&lt;/p&gt;

&lt;p&gt;If additional help is needed during setup, testing, or migration planning, the &lt;a href="https://support.boldsign.com/" rel="noopener noreferrer"&gt;BoldSign Support Portal&lt;/a&gt; provides direct access to documentation, guides, and the BoldSign support team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/controllers-vs-minimal-api-dotnet-8/" rel="noopener noreferrer"&gt;Controllers vs Minimal APIs in .NET 8: What to Choose and Why&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/edit-document-api/" rel="noopener noreferrer"&gt;BoldSign Edit Document API: Update Signers, Fields, and Files Without Restarting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/aspnet-core-minimal-apis-best-practices/" rel="noopener noreferrer"&gt;ASP.NET Core Minimal APIs: When to Use Them and When Not To Use Them&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt; &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>aiskills</category>
      <category>api</category>
      <category>boldsign</category>
    </item>
    <item>
      <title>Reduce eSignature Drop‑Off: Practical Ways to Improve Completion Rates</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Thu, 07 May 2026 04:06:19 +0000</pubDate>
      <link>https://dev.to/boldsign/reduce-esignature-drop-off-practical-ways-to-improve-completion-rates-2dc2</link>
      <guid>https://dev.to/boldsign/reduce-esignature-drop-off-practical-ways-to-improve-completion-rates-2dc2</guid>
      <description>&lt;p&gt;If your eSignature completion rate isn’t where you want it, it is rarely because people “don’t want to sign.” More often, they intend to complete the document. Something in the experience creates friction. The email does not land, the flow feels unclear on mobile, authentication slows them down, or the signer has to jump between apps and tabs.&lt;/p&gt;

&lt;p&gt;The good news: you don’t need to redesign everything to fix this. You can diagnose drop-off like a funnel, identify where people are getting stuck, and apply a handful of targeted improvements that typically lift completion rates quickly.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The eSignature funnel to pinpoint where drop-off happens&lt;/li&gt;
&lt;li&gt;  The most common causes (and what to change) at each stage&lt;/li&gt;
&lt;li&gt;  How BoldSign supports these fixes with embedded signing, templates, reminders, sender branding, custom email domain, and configurable security controls&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How can you diagnose eSignature drop-off using a funnel?
&lt;/h2&gt;

&lt;p&gt;Treat your signing experience like a conversion funnel so you can stop guessing and start fixing the right step.&lt;/p&gt;

&lt;p&gt;Sent → Delivered → Opened → Started → Completed&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Sent: Your system triggered the request successfully.&lt;/li&gt;
&lt;li&gt;  Delivered: The email reached the inbox (not spam/bounce).&lt;/li&gt;
&lt;li&gt;  Opened: The recipient opened the message.&lt;/li&gt;
&lt;li&gt;  Started: The recipient clicked and began signing.&lt;/li&gt;
&lt;li&gt;  Completed: The recipient finished and submitted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you know where the biggest drop is, the fix usually becomes obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you reduce eSignature drop-off step by step?
&lt;/h2&gt;

&lt;p&gt;Reducing drop-off means removing small but compounding friction points. Each stage below targets a specific failure pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) How do you improve “Sent → Delivered” rates?
&lt;/h3&gt;

&lt;p&gt;If your “Delivered” rate is low, your issue is not signing. It is email deliverability or sender trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Sender domain looks unfamiliar or untrusted&lt;/li&gt;
&lt;li&gt;  Poor list hygiene (old/invalid emails)&lt;/li&gt;
&lt;li&gt;  Emails routed to spam or promotions tabs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use a recognizable sender name and consistent “From” identity&lt;/li&gt;
&lt;li&gt;  Tighten list hygiene and reduce bounces&lt;/li&gt;
&lt;li&gt;  Keep subject lines and copy clear and predictable (avoid spam signals)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/electronic-signature-features/branding?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Branded email&lt;/a&gt; so recipients recognize the request and trust it&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/send-signature-requests-custom-email-domain?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Custom email domain&lt;/a&gt; so signature requests come from a domain aligned with your brand (helping recognition and reducing “who is this?” hesitation)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2) How do you increase “Delivered → Opened” rates?
&lt;/h3&gt;

&lt;p&gt;If delivered emails aren’t being opened, the request may not feel urgent, safe, or relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The sender name or domain is unfamiliar, triggering hesitation or distrust&lt;/li&gt;
&lt;li&gt;  The subject line is vague, generic, or looks automated&lt;/li&gt;
&lt;li&gt;  The email does not clearly explain why the recipient is receiving it&lt;/li&gt;
&lt;li&gt;  The action required is not obvious at a glance&lt;/li&gt;
&lt;li&gt;  The message blends into promotions or notification clutter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use a straightforward subject line (e.g., “Signature requested: [Document Name]”)&lt;/li&gt;
&lt;li&gt;  State the “why” in the first sentence (what it is + what they need to do)&lt;/li&gt;
&lt;li&gt;  Put the primary action clearly above the fold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Brand-consistent including &lt;a href="https://support.boldsign.com/kb/article/20030/email-content-customization-in-boldsign" rel="noopener noreferrer"&gt;custom email content&lt;/a&gt; increases recognition and reduces hesitation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3) How do you reduce friction from “Opened → Started”?
&lt;/h3&gt;

&lt;p&gt;This is where many flows quietly fail. People open the email, then postpone because starting feels like work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The user has to log in or switch apps&lt;/li&gt;
&lt;li&gt;  The signing link expires too quickly (or the rules are unclear)&lt;/li&gt;
&lt;li&gt;  The CTA is weak or the next step feels uncertain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reduce app switching wherever possible&lt;/li&gt;
&lt;li&gt;  Make the “Start signing” step immediate and predictable&lt;/li&gt;
&lt;li&gt;  Use reasonable expirations and make them clear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/embedded-signing/get-embedded-signing-link" rel="noopener noreferrer"&gt;Embedded signing&lt;/a&gt; keeps the signer inside your product or portal&lt;/li&gt;
&lt;li&gt;  Configurable &lt;a href="https://support.boldsign.com/kb/article/14271/configuring-embedded-link-expiration-api" rel="noopener noreferrer"&gt;expiration for embedded links&lt;/a&gt; so links don’t die before the signer returns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4) Started → Completed: How do you cut friction inside the document?
&lt;/h3&gt;

&lt;p&gt;Once a signer starts, completion should be fast. If they start but don’t finish, the document UX is likely the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Too many fields, or too many required fields&lt;/li&gt;
&lt;li&gt;  Signatures placed late in the document (users don’t see quick progress)&lt;/li&gt;
&lt;li&gt;  Confusing labels, unclear instructions, or bad mobile layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Remove unnecessary fields; minimize required inputs&lt;/li&gt;
&lt;li&gt;  Pre-fill anything you already know (name, company, address, dates)&lt;/li&gt;
&lt;li&gt;  Place signature/initial fields earlier where appropriate&lt;/li&gt;
&lt;li&gt;  Add clear labels and hints (“Sign here,” “Initial here,” “Date auto-fills”)&lt;/li&gt;
&lt;li&gt;  Ensure a mobile-friendly layout (spacing, tap targets, field alignment)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/electronic-signature-features/templates?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Templates&lt;/a&gt; to standardize layouts and reduce mistakes across recurring documents&lt;/li&gt;
&lt;li&gt;  Pre-fill fields in templates to minimize manual entry and speed up completion&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://support.boldsign.com/kb/article/21659/faqs-audit-trails-in-boldsign" rel="noopener noreferrer"&gt;Audit trails&lt;/a&gt; to support compliance and reduce disputes after signing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5) How much authentication is too much for eSignatures?
&lt;/h3&gt;

&lt;p&gt;Extra authentication can protect sensitive workflows, but too much friction can dramatically reduce completion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Authentication applied to low risk documents where it isn’t expected&lt;/li&gt;
&lt;li&gt;  One time passwords (OTP) or access codes added without explaining the reason&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Apply stronger authentication only when the document warrants it&lt;/li&gt;
&lt;li&gt;  If you require OTP or access codes, make sure the signer knows why in one sentence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://support.boldsign.com/kb/article/20362/authentication-frequency-settings" rel="noopener noreferrer"&gt;Authentication frequency settings&lt;/a&gt; so you can tune friction vs. assurance based on workflow needs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why do eSignature reminders consistently increase completion rates?
&lt;/h2&gt;

&lt;p&gt;Most non-completions are not rejections; they are caused by forgetfulness and busy schedules&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common causes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  No follow up after the initial request&lt;/li&gt;
&lt;li&gt;  Manual reminders delayed or forgotten by senders&lt;/li&gt;
&lt;li&gt;  Signers intend to complete later but miss the deadline&lt;/li&gt;
&lt;li&gt;  Expiration dates arrive without warning&lt;/li&gt;
&lt;li&gt;  No visibility into which stage the signer is stuck in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practical fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  First reminder: 24–48 hours&lt;/li&gt;
&lt;li&gt;  Follow-ups: every 2–3 days (limit total reminders to avoid annoyance)&lt;/li&gt;
&lt;li&gt;  Add a final “expires soon” nudge if you use expirations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How BoldSign helps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://support.boldsign.com/kb/article/19177/set-automatic-reminders-for-electronic-signature-requests-through-api" rel="noopener noreferrer"&gt;Automatic reminders&lt;/a&gt; at create&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/documents/send-reminder" rel="noopener noreferrer"&gt;Reminders via API&lt;/a&gt; so your product can trigger reminders based on recipient behavior and funnel stage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What common mistakes quietly lower eSignature completion?
&lt;/h2&gt;

&lt;p&gt;Many eSignature requests fail not because people refuse to sign, but because small usability issues make the process confusing or slower than expected, causing signers to stop before finishing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mistake&lt;/th&gt;
&lt;th&gt;What signers experience&lt;/th&gt;
&lt;th&gt;How to prevent it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Too many fields&lt;/td&gt;
&lt;td&gt;Task feels longer than expected&lt;/td&gt;
&lt;td&gt;Request only essential data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unclear invitation&lt;/td&gt;
&lt;td&gt;Hesitation or distrust&lt;/td&gt;
&lt;td&gt;Explain sender and purpose clearly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No reminders&lt;/td&gt;
&lt;td&gt;People forget&lt;/td&gt;
&lt;td&gt;Schedule polite follow‑ups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unclear field labels&lt;/td&gt;
&lt;td&gt;Confusion and pauses&lt;/td&gt;
&lt;td&gt;Use simple, descriptive labels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unnecessary signing order&lt;/td&gt;
&lt;td&gt;One delay blocks everyone&lt;/td&gt;
&lt;td&gt;Enforce order only when needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What should you verify before sending an eSignature request?
&lt;/h2&gt;

&lt;p&gt;Before sending an eSignature request, confirm a small set of fundamentals that prevent avoidable delays and signer drop-off.&lt;br&gt;&lt;br&gt;
This checklist focuses only on configuration and setup decisions that influence whether a signer can start and finish without friction.&lt;/p&gt;

&lt;p&gt;Use this pre send checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Deliverability: Recognizable sender name, custom email domain, clean recipient list&lt;/li&gt;
&lt;li&gt;  Email clarity: Clear subject line and a visible call to action near the top of the email&lt;/li&gt;
&lt;li&gt;  Start friction: Embedded signing enabled, minimal redirects, clear and reasonable expiration timelines&lt;/li&gt;
&lt;li&gt;  Document usability: Only required fields included, known data prefilled, layout optimized for mobile&lt;/li&gt;
&lt;li&gt;  Follow up: Automatic reminders scheduled, with the first reminder sent within 24 to 48 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What actually improves eSignature completion in the real world
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Checkout time signing: Embedded signing during a transaction completes faster than email based flows&lt;/li&gt;
&lt;li&gt;  Offer letters: Placing signature fields earlier reduces candidate hesitation and delays&lt;/li&gt;
&lt;li&gt;  Vendor onboarding: Removing duplicate or nonessential fields shortens time to completion&lt;/li&gt;
&lt;li&gt;  Low risk agreements: Using lighter authentication avoids unnecessary signer frustration&lt;/li&gt;
&lt;li&gt;  Automated reminders: Replacing manual follow ups reduces idle time between steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These improvements focus on how people actually behave after receiving a signing request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final key takeaways: How reducing friction improves eSignature completion rates
&lt;/h2&gt;

&lt;p&gt;Reducing eSignature drop-off is not about pushing signers harder. It is about removing avoidable friction at every stage of the signing journey. When emails are trusted, starting is effortless, documents are fast to complete, security feels appropriate, and reminders arrive at the right time, completion rates improve naturally. You do not need to redesign your workflow to see results. Treat eSignature like a funnel, identify where signers pause, and apply targeted fixes. This approach consistently increases completion without adding operational overhead.&lt;/p&gt;

&lt;p&gt;BoldSign supports this end to end with embedded signing, reusable templates, pre filled fields, branded email delivery, flexible authentication, automated reminders, and audit ready compliance, so teams can focus on speed, trust, and completion rather than follow ups and guesswork.&lt;/p&gt;

&lt;p&gt;If you’d like to explore more about BoldSign capabilities, sign up for a free &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign API account&lt;/a&gt; leave a comment, book a &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;demo&lt;/a&gt;, or connect with our support team through the BoldSign &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>rates</category>
      <category>completionrates</category>
      <category>documents</category>
    </item>
    <item>
      <title>Webinar Show Notes: Salesforce Contract Management with BoldSign</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 06 May 2026 03:39:06 +0000</pubDate>
      <link>https://dev.to/boldsign/webinar-show-notes-salesforce-contract-management-with-boldsign-4de0</link>
      <guid>https://dev.to/boldsign/webinar-show-notes-salesforce-contract-management-with-boldsign-4de0</guid>
      <description>&lt;p&gt;In this session, Gayathri Annamalai, Software Developer at BoldSign, walks through how organizations can eliminate manual document steps by managing the entire eSignature lifecycle inside Salesforce. Instead of exporting data, switching tools, or tracking status manually, teams can send agreements, monitor progress, and store signed documents directly from Salesforce records.&lt;/p&gt;

&lt;p&gt;If you missed the live session or would like to watch it again, the recording is embedded on this page and is also available on our YouTube channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Webinar recap
&lt;/h2&gt;

&lt;p&gt;The webinar opened with a common challenge many Salesforce teams face today. Contract workflows often involve copying data from Salesforce into documents, sending them through separate eSignature tools, and manually updating status afterward. This back and forth introduces delays, duplicate work, and a lack of visibility.&lt;/p&gt;

&lt;p&gt;Gayathri then introduced the BoldSign Salesforce integration and explained how it brings eSignature workflows directly into Salesforce. She demonstrated how admins enable the integration once at the account level and how users work entirely within Salesforce afterward.&lt;/p&gt;

&lt;p&gt;The live demo showed how templates and field mapping automatically prefill Salesforce data into documents, ensuring consistency and reducing errors. The session also highlighted how BoldSign Lightning Components can be added to Accounts, Contacts, Leads, and Opportunities, allowing users to send and track documents without navigating away from the record they are working on.&lt;/p&gt;

&lt;p&gt;Finally, the webinar covered real-time document tracking and the automatic storage of completed agreements back into Salesforce, keeping Salesforce as the single source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Enable and configure the BoldSign Salesforce integration with a one time admin setup&lt;/li&gt;
&lt;li&gt;  Use templates and field mapping to automatically prefill Salesforce data&lt;/li&gt;
&lt;li&gt;  Add BoldSign Lightning Components to Salesforce record pages&lt;/li&gt;
&lt;li&gt;  Send documents directly from Salesforce without exporting files&lt;/li&gt;
&lt;li&gt;  Track document status in real-time inside Salesforce&lt;/li&gt;
&lt;li&gt;  Automatically save signed documents back to Salesforce records&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Configure the BoldSign Salesforce integration once as an admin&lt;/li&gt;
&lt;li&gt;  Eliminate manual data entry with templates and field mapping&lt;/li&gt;
&lt;li&gt;  Send and manage eSignatures directly from Salesforce records&lt;/li&gt;
&lt;li&gt;  Maintain full visibility into document status without switching tools&lt;/li&gt;
&lt;li&gt;  Keep signed documents automatically stored in Salesforce&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Helpful resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Learn more about &lt;a href="https://boldsign.com/integrations/salesforce-esignature?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign for Salesforce&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Explore &lt;a href="https://boldsign.com/integrations/salesforce-esignature?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign Integrations&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  View &lt;a href="https://support.boldsign.com/kb/article/22489/boldsign-and-salesforce-integration" rel="noopener noreferrer"&gt;Salesforce Integration Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Contact &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;BoldSign Support&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Start a &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;free trial&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/embed-esignature-workflows-dotnet-app/" rel="noopener noreferrer"&gt;Webinar Show Notes: Embed eSignature Workflows in .NET App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-new-features-webinar-recap/" rel="noopener noreferrer"&gt;Webinar Show Notes: What’s New in BoldSign&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/ai-search-contracts-webinar-recap/" rel="noopener noreferrer"&gt;Webinar Show Notes: Find Contracts in Seconds with BoldSign AI Search&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>webinar</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Introducing BoldSign’s Free Phone Number QR Code Generator</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 05 May 2026 03:47:12 +0000</pubDate>
      <link>https://dev.to/boldsign/introducing-boldsigns-free-phone-number-qr-code-generator-2mai</link>
      <guid>https://dev.to/boldsign/introducing-boldsigns-free-phone-number-qr-code-generator-2mai</guid>
      <description>&lt;p&gt;Phone Number QR codes make communication effortless. With a single scan, users can open their phone dialer with your number already filled in and ready to call. This simple upgrade eliminates typing errors, speeds up response time, and increases the chances of customers connecting with you instantly.&lt;/p&gt;

&lt;p&gt;With BoldSign’s &lt;a href="https://boldsign.com/phone-number-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;free Phone Number QR code generator&lt;/a&gt;, you can convert any phone number into a scannable QR code in seconds. No sign up, no watermark, no tracking, and no limits. This guide covers everything you need to know, including what a Phone Number QR code is, how it works, and all the best ways to use it effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Phone Number QR code?
&lt;/h2&gt;

&lt;p&gt;A Phone Number QR code is a scannable code that opens the phone dialer with your number prefilled when someone scans it with their smartphone camera. One tap places the call.&lt;/p&gt;

&lt;p&gt;You can link to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A personal number&lt;/li&gt;
&lt;li&gt;  A business contact number&lt;/li&gt;
&lt;li&gt;  A support or helpdesk number• A service hotline&lt;/li&gt;
&lt;li&gt;  A campaign-specific call number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why it matters: It removes the friction of typing digits manually and reduces errors dramatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use a Phone Number QR code?
&lt;/h2&gt;

&lt;p&gt;A Phone Number QR code makes starting a call quick, simple, and frustration-free. It is effective across both online and offline channels where you want instant customer contact.&lt;/p&gt;

&lt;p&gt;Key benefits&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Instant calling – One scan opens your number in the dialer. Faster communication and fewer missed opportunities.&lt;/li&gt;
&lt;li&gt;  Higher conversions – Ideal for reservation counters, brochures, and event booths where customers decide quickly.&lt;/li&gt;
&lt;li&gt;  Better customer experience – No typing, no searching, no mistakes.&lt;/li&gt;
&lt;li&gt;  Modern presentation – Add QR codes to business cards, brochures, receipts, and printed materials to upgrade your brand presence.&lt;/li&gt;
&lt;li&gt;  Mobile first convenience – All modern smartphones support QR code scanning with the native camera.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create Phone Number QR code for free?
&lt;/h2&gt;

&lt;p&gt;Creating your Phone Number QR code takes only a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you’ll need&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Your phone number&lt;/li&gt;
&lt;li&gt;  A browser on any device&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step by step&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Enter your phone number
Type the number you want users to call instantly.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Customize your QR code&lt;br&gt;&lt;br&gt;
Adjust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pattern color&lt;/li&gt;
&lt;li&gt;  Background color&lt;/li&gt;
&lt;li&gt;  QR code size
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Download and share&lt;br&gt;&lt;br&gt;
Export your QR code as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  PNG&lt;/li&gt;
&lt;li&gt;  JPEG&lt;/li&gt;
&lt;li&gt;  SVG
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jm6ik3nk15yt69apokw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jm6ik3nk15yt69apokw.png" alt="Phone Number QR code generator" width="800" height="462"&gt;&lt;/a&gt;Phone Number QR code generator&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose BoldSign’s Phone Number QR code generator
&lt;/h2&gt;

&lt;p&gt;BoldSign’s tool is built for speed, security, and ease of use.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  100% free forever: No subscriptions, no hidden fees, and no watermarks.&lt;/li&gt;
&lt;li&gt;  Privacy first: Your number is processed directly in your browser. Nothing is stored or sent anywhere.&lt;/li&gt;
&lt;li&gt;  Instant results: Generate high quality QR codes in seconds.&lt;/li&gt;
&lt;li&gt;  Works on all devices: Windows, macOS, Linux, iOS, and Android. No apps are needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best ways to use Phone Number QR code
&lt;/h2&gt;

&lt;p&gt;Phone Number QR codes can improve customer communication everywhere you place them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Business cards: Make contacting you easier with a quick scan.&lt;/li&gt;
&lt;li&gt;  Storefronts and counters: Let walk-in customers call for assistance or reservations.&lt;/li&gt;
&lt;li&gt;  Printed marketing: Add QR codes to flyers, banners, posters, and brochures.&lt;/li&gt;
&lt;li&gt;  Events and exhibitions: Great for booths, badges, and digital screens where quick contact matters.&lt;/li&gt;
&lt;li&gt;  Online communication: Add your QR code to email signatures, social media graphics, and presentations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;A Phone Number QR code makes calling you faster, simpler, and error-free. It removes extra steps, increases customer accessibility, and lets people reach you instantly from any medium, whether it is printed or digital.&lt;/p&gt;

&lt;p&gt;Create your &lt;a href="https://boldsign.com/phone-number-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Phone Number QR code&lt;/a&gt; with BoldSign today and make it easier for people to connect with you in seconds.&lt;/p&gt;

&lt;p&gt;Ready to simplify your document workflows? &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Sign up for a free 30-day trial&lt;/a&gt; or connect with our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support team&lt;/a&gt; for a personalized &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-snapchat-qr-code-online/" rel="noopener noreferrer"&gt;Introducing BoldSign’s Snapchat QR Code Generator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-facebook-qr-code-online/" rel="noopener noreferrer"&gt;Free Facebook QR Code Generator for Profiles, Pages &amp;amp; Posts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-email-qr-code-online/" rel="noopener noreferrer"&gt;Free Email QR Code Generator for Ready‑to‑Use Email Drafts&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt; &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>qrcode</category>
      <category>phonenumber</category>
      <category>documents</category>
    </item>
    <item>
      <title>Construction Contract Basics: What Every Project Agreement Should Include</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 04 May 2026 04:11:53 +0000</pubDate>
      <link>https://dev.to/boldsign/construction-contract-basics-what-every-project-agreement-should-include-2536</link>
      <guid>https://dev.to/boldsign/construction-contract-basics-what-every-project-agreement-should-include-2536</guid>
      <description>&lt;p&gt;A construction contract is the document that defines the project scope, responsibilities, timeline, payment terms, and change rules so everyone knows exactly what to do and how disputes will be handled. The strongest construction agreements prevent misunderstandings early by clearly documenting who is involved, what work will be done, when it will happen, how payments work, and what to do when something changes. &lt;/p&gt;

&lt;p&gt;In this guide, you’ll learn the must-have components of a construction contract, the most common agreement challenges, and a simple approval workflow. You’ll also see how BoldSign helps teams execute contracts faster with &lt;a href="https://boldsign.com/electronic-signature-features/templates?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;templates&lt;/a&gt;, &lt;a href="https://support.boldsign.com/kb/article/572/how-to-set-the-signing-order-of-the-signers" rel="noopener noreferrer"&gt;signing order&lt;/a&gt;, &lt;a href="https://support.boldsign.com/kb/article/144/manage-auto-reminder-after-sending-document" rel="noopener noreferrer"&gt;reminders&lt;/a&gt;, &lt;a href="https://support.boldsign.com/kb/article/14014/track-changes-on-a-document" rel="noopener noreferrer"&gt;tracking&lt;/a&gt;, and &lt;a href="https://support.boldsign.com/kb/article/106/download-audit-trail-document" rel="noopener noreferrer"&gt;audit trails&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why a solid construction contract matters 
&lt;/h2&gt;

&lt;p&gt;A construction contract is more than a formality. It protects the project by creating a clear, enforceable framework for: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Communication between owners, contractors, architects, subcontractors, and suppliers &lt;/li&gt;
&lt;li&gt;  Legal protection against misunderstandings, claims, and disputes &lt;/li&gt;
&lt;li&gt;  Scope clarity for deliverables, materials, and quality standards &lt;/li&gt;
&lt;li&gt;  Timeline control with milestones and delay handling &lt;/li&gt;
&lt;li&gt;  Payment clarity including retainage, progress billing, and approvals &lt;/li&gt;
&lt;li&gt;  Change management when the scope or schedule shifts &lt;/li&gt;
&lt;li&gt;  Safety and compliance alignment with local regulations and requirements &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strong contract reduces risk, improves coordination, and helps keep the project on schedule and on budget. &lt;/p&gt;

&lt;h2&gt;
  
  
  Common challenges in construction agreements 
&lt;/h2&gt;

&lt;p&gt;Construction projects involve many stakeholders and moving parts. The most frequent issues usually come from unclear terms, delays, and inconsistent approvals. &lt;/p&gt;

&lt;h3&gt;
  
  
  Delays and scheduling conflicts 
&lt;/h3&gt;

&lt;p&gt;Weather, labor shortages, or supply disruptions can trigger timeline disputes and added costs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to reduce risk&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Define delay allowances and notice requirements &lt;/li&gt;
&lt;li&gt;  Track approvals and hold signers accountable with reminders and visibility &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Payment disputes 
&lt;/h3&gt;

&lt;p&gt;Disagreements over amounts due, timing, or work quality can impact cash flow and lead to liens. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to reduce risk&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Specify payment milestones, retainage, and approval conditions &lt;/li&gt;
&lt;li&gt;  Maintain clear records of approvals and signed terms &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contract interpretation issues 
&lt;/h3&gt;

&lt;p&gt;Ambiguous wording around scope, responsibilities, or change control can cause conflicts. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to reduce risk&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Standardize contract language using templates &lt;/li&gt;
&lt;li&gt;  Reference drawings, specifications, and addenda clearly &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changed conditions or scope creep 
&lt;/h3&gt;

&lt;p&gt;Design changes and site surprises often cause cost and timeline disputes. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to reduce risk&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Define a formal change order process &lt;/li&gt;
&lt;li&gt;  Require documented approvals before work proceeds &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Subcontractor and quality disputes 
&lt;/h3&gt;

&lt;p&gt;Workmanship issues and coordination gaps can escalate quickly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to reduce risk&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Assign responsibility clearly &lt;/li&gt;
&lt;li&gt;  Keep sign-offs and confirmations traceable with audit-ready records &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most disputes come from unclear scope, unclear payment terms, unmanaged changes, and missing approval evidence. &lt;/p&gt;

&lt;h2&gt;
  
  
  Essential components of a construction contract 
&lt;/h2&gt;

&lt;p&gt;Below are the core elements every construction contract should include. These are the sections that make agreements clear, enforceable, and easier to manage. &lt;/p&gt;

&lt;h3&gt;
  
  
  Identification of parties 
&lt;/h3&gt;

&lt;p&gt;Include full legal names, addresses, and roles for: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Owner &lt;/li&gt;
&lt;li&gt;  General contractor &lt;/li&gt;
&lt;li&gt;  Subcontractors (as applicable) &lt;/li&gt;
&lt;li&gt;  Architects, engineers, or designers (as applicable) &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scope of work 
&lt;/h3&gt;

&lt;p&gt;Define what work will be performed and how it will be measured. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Project tasks and deliverables &lt;/li&gt;
&lt;li&gt;  Materials and workmanship standards &lt;/li&gt;
&lt;li&gt;  Drawings, specifications, and addenda references &lt;/li&gt;
&lt;li&gt;  Exclusions and assumptions to prevent scope creep &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project timeline and schedule 
&lt;/h3&gt;

&lt;p&gt;Outline the schedule and how delays are handled. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Start date and substantial completion date &lt;/li&gt;
&lt;li&gt;  Milestones and deliverable deadlines &lt;/li&gt;
&lt;li&gt;  Delay notice requirements &lt;/li&gt;
&lt;li&gt;  Consequences for delays if applicable &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Payment terms and schedule 
&lt;/h3&gt;

&lt;p&gt;Clarify how and when payment happens. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Total contract value or pricing structure &lt;/li&gt;
&lt;li&gt;  Progress payment schedule &lt;/li&gt;
&lt;li&gt;  Retainage percentage and release conditions &lt;/li&gt;
&lt;li&gt;  Invoicing requirements and approval process &lt;/li&gt;
&lt;li&gt;  Late payment terms if applicable &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Change order process 
&lt;/h3&gt;

&lt;p&gt;Define how scope, cost, and timeline changes are approved. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What qualifies as a change order &lt;/li&gt;
&lt;li&gt;  Required documentation &lt;/li&gt;
&lt;li&gt;  Approval roles and signing order &lt;/li&gt;
&lt;li&gt;  How costs and schedule changes are calculated &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Responsibilities and warranties 
&lt;/h3&gt;

&lt;p&gt;Assign responsibilities clearly and protect the project quality. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Responsibilities for owner, contractor, and subcontractors &lt;/li&gt;
&lt;li&gt;  Workmanship and materials warranties &lt;/li&gt;
&lt;li&gt;  Insurance requirements and coverage levels &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dispute resolution 
&lt;/h3&gt;

&lt;p&gt;Set a clear path to handle conflicts. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mediation, arbitration, or litigation process &lt;/li&gt;
&lt;li&gt;  Governing law and jurisdiction &lt;/li&gt;
&lt;li&gt;  Notice and escalation steps &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Termination clauses 
&lt;/h3&gt;

&lt;p&gt;Define when and how the agreement can end. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Termination for cause and termination for convenience &lt;/li&gt;
&lt;li&gt;  Cure periods and notice requirements &lt;/li&gt;
&lt;li&gt;  Final payment and materials handling &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Force majeure and insurance 
&lt;/h3&gt;

&lt;p&gt;Cover uncontrollable events and risk protection. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Force majeure definition and impacts on schedule &lt;/li&gt;
&lt;li&gt;  Required insurance for all parties &lt;/li&gt;
&lt;li&gt;  Safety and incident reporting expectations &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contract documents list 
&lt;/h3&gt;

&lt;p&gt;List every document that forms the agreement. &lt;/p&gt;

&lt;p&gt;Include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  General conditions and special conditions &lt;/li&gt;
&lt;li&gt;  Drawings and specifications &lt;/li&gt;
&lt;li&gt;  Change orders and addenda &lt;/li&gt;
&lt;li&gt;  Schedules and exhibits &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; These components reduce ambiguity and create a clear rulebook for handling delays, payments, and changes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Key steps in the contract approval workflow 
&lt;/h2&gt;

&lt;p&gt;A typical construction contract approval workflow looks like this. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Draft the contract 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Build from a standardized template &lt;/li&gt;
&lt;li&gt;  Include project-specific scope, schedule, and payment terms &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Review 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Share with legal, project stakeholders, and required approvers &lt;/li&gt;
&lt;li&gt;  Confirm compliance requirements and risk terms &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Negotiate and revise 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Address feedback &lt;/li&gt;
&lt;li&gt;  Finalize scope and change control language &lt;/li&gt;
&lt;li&gt;  Confirm pricing, milestones, and retainage &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Approve and sign 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Route to signers in the correct order &lt;/li&gt;
&lt;li&gt;  Ensure every party signs the final version &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Execute and store 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Distribute the signed copy &lt;/li&gt;
&lt;li&gt;  Store securely with audit-ready records &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The approval process fails most often when versions split and signing order is unclear. &lt;/p&gt;

&lt;h2&gt;
  
  
  How BoldSign improves construction contract approvals 
&lt;/h2&gt;

&lt;p&gt;BoldSign streamlines contract execution for construction teams with features designed for multi-party workflows. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Templates&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Use reusable &lt;a href="https://boldsign.com/electronic-signature-features/templates?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;contract templates&lt;/a&gt; to standardize common construction agreements and speed up drafting.&lt;/p&gt;

&lt;p&gt;With document template, teams can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Draft contracts faster&lt;/li&gt;
&lt;li&gt;  Reduce missing fields and costly errors&lt;/li&gt;
&lt;li&gt;  Standardize contract language across projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Templates ensure consistency across bids, change orders, and subcontractor agreements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vdrub05iy4mf80t0bxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vdrub05iy4mf80t0bxi.png" alt="create new template" width="800" height="380"&gt;&lt;/a&gt;create new template&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E-signatures&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Enable secure, legally compliant &lt;a href="https://boldsign.com?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;eSignatures&lt;/a&gt; for on‑site teams and remote stakeholders.&lt;/p&gt;

&lt;p&gt;With eSignature, construction teams benefit from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Faster contract turnaround&lt;/li&gt;
&lt;li&gt;  Reduced reliance on paper and printing&lt;/li&gt;
&lt;li&gt;  Mobile‑friendly signing from any device&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Signing order and role routing&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Automatically route documents to the right stakeholders in sequence or parallel using &lt;a href="https://support.boldsign.com/kb/article/13927/allow-signers-sign-in-particular-order" rel="noopener noreferrer"&gt;signing order&lt;/a&gt; and role‑based workflows.&lt;/p&gt;

&lt;p&gt;Common flows include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Owner approval followed by contractor and subcontractor&lt;/li&gt;
&lt;li&gt;  Legal review before final client sign‑off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures approvals happen in the correct order without manual coordination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated reminders&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Reduce delays by automatically following up with pending signers. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time tracking&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Monitor contract progress from send to completion using a centralized dashboard with real-time visibility through &lt;a href="https://support.boldsign.com/kb/article/14014/track-changes-on-a-document" rel="noopener noreferrer"&gt;document tracking&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Identify approval bottlenecks early&lt;/li&gt;
&lt;li&gt;  Monitor deadlines more effectively&lt;/li&gt;
&lt;li&gt;  Reduce status check emails and calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Audit trails&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Maintain tamper‑evident records for compliance and accountability with the availability of detailed &lt;a href="https://support.boldsign.com/kb/article/14647/information-the-audit-trail-document-contains" rel="noopener noreferrer"&gt;audit trails&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Who signed the contract&lt;/li&gt;
&lt;li&gt;  When each signature was completed&lt;/li&gt;
&lt;li&gt;  All actions taken during the approval process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially valuable for dispute resolution and regulatory audits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ip1uvhtpqsmvabil5fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ip1uvhtpqsmvabil5fa.png" alt="Audit Trail" width="800" height="512"&gt;&lt;/a&gt;Audit Trail&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 
&lt;/h2&gt;

&lt;p&gt;A solid construction contract is a roadmap for project success. When your contract clearly defines scope, timelines, payments, responsibilities, and change control, you reduce disputes and keep work moving. &lt;/p&gt;

&lt;p&gt;With digital approvals and &lt;a href="https://boldsign.com/electronic-signature-features?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;eSignatures&lt;/a&gt;, teams can execute contracts faster, reduce manual coordination, and maintain audit-ready records. If you manage complex construction workflows, BoldSign can help standardize and speed up contract approvals. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Sign up for a free 30-day trial&lt;/a&gt; on the &lt;a href="https://boldsign.com?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign website&lt;/a&gt; or &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;request a demo&lt;/a&gt; to see it in action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-teams-api-guide" rel="noopener noreferrer"&gt;Make Contract Collaboration Effortless Across Teams with BoldSign API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/ai-document-search-in-boldsign/" rel="noopener noreferrer"&gt;Find Contracts Instantly with AI Document Search in BoldSign&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/ai-search-contracts-webinar-recap/" rel="noopener noreferrer"&gt;Webinar Show Notes: Find Contracts in Seconds with BoldSign AI Search&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>agreement</category>
      <category>contractsigning</category>
      <category>documents</category>
    </item>
    <item>
      <title>BoldSign Formula Fields: Automate Calculations in eSignature Documents</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Thu, 30 Apr 2026 04:04:47 +0000</pubDate>
      <link>https://dev.to/boldsign/boldsign-formula-fields-automate-calculations-in-esignature-documents-176m</link>
      <guid>https://dev.to/boldsign/boldsign-formula-fields-automate-calculations-in-esignature-documents-176m</guid>
      <description>&lt;p&gt;Manually calculating values in documents can be time-consuming and leave you prone to error, especially when dealing with contracts, invoices, or agreements that require dynamic values like totals, taxes, or discounts. You might struggle to ensure accuracy and consistency across multiple signers and documents. Repetitive manual entry of calculated fields like subtotals, taxes, and totals increases the risk of human error, which can lead to compliance issues or financial discrepancies. It can also cause delays in document turnaround because calculations need verification before sending.&lt;/p&gt;

&lt;p&gt;What if you could automate these calculations directly within your e-signature workflow? That’s where BoldSign formula fields come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What problems do formula fields solve in eSignature documents?
&lt;/h2&gt;

&lt;p&gt;With formula fields, you can define dynamic calculations directly in your e-signature documents using the BoldSign API.&lt;/p&gt;

&lt;p&gt;Key benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Automated calculations:&lt;/strong&gt; You can perform real-time calculations like totals, taxes, discounts, or custom formulas based on other field values.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Error reduction:&lt;/strong&gt; Reduce manual entry errors by computing values automatically, ensuring consistency and accuracy.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Improved user experience:&lt;/strong&gt; Signers don’t need to do math themselves. The document updates instantly as they fill in fields.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dynamic content:&lt;/strong&gt; You can create smart documents that adapt based on user input, making them more interactive and professional.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Time savings:&lt;/strong&gt; Save time for both senders and signers by eliminating the need for manual calculations or post-signing edits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Supports complex logic:&lt;/strong&gt; Use functions like IF for advanced scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do BoldSign formula fields work?
&lt;/h2&gt;

&lt;p&gt;These formulas are built using supported operators, functions, and fields without storing static data. As signers enter values into the form, the formula fields in the document recalculate instantly. This ensures accurate results and reduces manual effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which fields, operators, and functions are supported?
&lt;/h2&gt;

&lt;p&gt;BoldSign &lt;a href="https://support.boldsign.com/kb/article/18910/configure-and-use-formula-fields" rel="noopener noreferrer"&gt;formula fields&lt;/a&gt; support various form fields, operators, and functions to help you streamline arithmetic calculations in your e-signature documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you add formula fields to a document API request?
&lt;/h2&gt;

&lt;p&gt;When creating or sending a document or template via the BoldSign API, you can add formula fields programmatically by including them in the &lt;code&gt;formFields&lt;/code&gt; array of your request payload.&lt;/p&gt;

&lt;p&gt;Here’s what to include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;fieldType&lt;/code&gt;: Set to “Formula” to indicate it’s a formula field.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;formulaFieldSettings&lt;/code&gt;: This object contains:

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;formulaExpression&lt;/code&gt;: The actual calculation logic (e.g., “[textbox1] – [textbox2]”). Use only the field ID in your formula expression.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;decimalPrecision&lt;/code&gt;: The number of decimal places to show in the result.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What does a vehicle sales agreement example look like with formula fields?
&lt;/h2&gt;

&lt;p&gt;Let’s look at a practical example. Suppose you’re sending a vehicle sales agreement and want the signer to enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Total vehicle value → [Textbox1].&lt;/li&gt;
&lt;li&gt;  Deposit amount → [Textbox2].&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From these inputs, you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Calculate the remaining balance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Formula: Balance = [Textbox1]- [Textbox2]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Set the Payment Date to be seven days from the signing date.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Formula: PaymentDate = AddDays([SigningDate], 7)&lt;br&gt;&lt;br&gt;
(Payment should be made 7 days from the signing date.)&lt;/p&gt;

&lt;p&gt;When the document is sent via the BoldSign API, the balance and payment date are automatically calculated in real time as the signer fills in the values. This eliminates manual math, reduces errors, and improves the signing experience.&lt;/p&gt;

&lt;p&gt;Here are example code snippets for sending a signature request with formula fields via API.&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-X&lt;/span&gt; &lt;span class="s1"&gt;'POST'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="s1"&gt;'https://api.boldsign.com/v1/document/send'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {your API key}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
        "Signers": [
          {
            "Name": "Hanky",
            "EmailAddress": " david@cubeflakes.com",
            "SignerType": "Signer",
            "DeliveryMode": "Email",
            "FormFields": [
              {
                "Id": "signature1",   
                "FieldType": "Signature",
                "PageNumber": 1,
                "Bounds": { "X": 50, "Y": 50, "Width": 100, "Height": 50 },
                "IsRequired": true
              },
              {
                "Id": "textbox1",              // TextBox 1
                "FieldType": "TextBox",
                "PageNumber": 1,
                "Bounds": { "X": 50, "Y": 100, "Width": 100, "Height": 30 },
                "IsRequired": true,
                "ValidationType": "NumbersOnly"
              },
              {
                "Id": "textbox2",          // TextBox 2
                "FieldType": "TextBox",
                "PageNumber": 1,
                "Bounds": { "X": 200, "Y": 100, "Width": 100, "Height": 30 },
                "IsRequired": true,
                "ValidationType": "NumbersOnly"
              },
              {
                "Id": "SigningDate",        // Signing Date
                "FieldType": "DateSigned",
                "PageNumber": 1,
                "Bounds": { "X": 200, "Y": 200, "Width": 125, "Height": 25 },
                "IsRequired": true
              },
              {
                "Id": "PaymentDate",     # Payment Date (7 days after Signing Date)
                "FieldType": "Formula",
                "PageNumber": 1,
                "Bounds": { "X": 50, "Y": 200, "Width": 200, "Height": 30 },
                "FormulaFieldSettings": {
                  "FormulaExpression": "AddDays([SigningDate],7)",
                }
              },
              {
                "Id": "Balance",   // Balance (Formula)
                "FieldType": "Formula",
                "PageNumber": 1,
                "Bounds": { "X": 50, "Y": 250, "Width": 200, "Height": 30 },
                "FormulaFieldSettings": {
                  "FormulaExpression": "[textbox1] - [textbox2]",
                  "DecimalPrecision": 1
                }
              }
            ],
            "Locale": "EN"
          }
        ],
        "ExpiryDays": 30,
        "Files": [
          "data:application/pdf;base64,JVBERi0xLjcKJcfs..." 
        ],
        "Title": "Vehicle Sales Agreement",
        "ExpiryDateType": "Days",
        "ExpiryValue": 60,
        }
      }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;c#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.boldsign.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Your API Key"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DocumentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                    &lt;span class="c1"&gt;// Define all form fields&lt;/span&gt;
                    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;formField&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="c1"&gt;// Signature field&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Signature"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;

                        &lt;span class="c1"&gt;// TextBox 1&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TextBoxField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"textbox1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;validationType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BoldSign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValidationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NumbersOnly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

                        &lt;span class="c1"&gt;// TextBox 2&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TextBoxField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"textbox2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;validationType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BoldSign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValidationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NumbersOnly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

                        &lt;span class="c1"&gt;// Signing date&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"SigningDate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DateSigned&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

                        &lt;span class="c1"&gt;// Payment date&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"PaymentDate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Formula&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
                            &lt;span class="p"&gt;),&lt;/span&gt;

                        &lt;span class="c1"&gt;// Balance (formula)&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                            &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Balance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Formula&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
                            &lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;};&lt;/span&gt;

                    &lt;span class="n"&gt;formField&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;FormulaFieldSettings&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;FormulaExpression&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"AddDays([SigningDate],7)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="p"&gt;};&lt;/span&gt;
                    &lt;span class="n"&gt;formField&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;FormulaFieldSettings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;FormulaFieldSettings&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;FormulaExpression&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"[textbox1] - [textbox2]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;DecimalPrecision&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
                    &lt;span class="p"&gt;};&lt;/span&gt;

                    &lt;span class="c1"&gt;// Document details&lt;/span&gt;
                    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentDetails&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SendForSign&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Agreement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;Signers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                                &lt;span class="n"&gt;signerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"David"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                &lt;span class="n"&gt;signerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SignerType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                &lt;span class="n"&gt;signerEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"david@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                &lt;span class="n"&gt;formFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;formField&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="p"&gt;},&lt;/span&gt;
                        &lt;span class="n"&gt;Files&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IDocumentFile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DocumentFilePath&lt;/span&gt;
                            &lt;span class="p"&gt;{&lt;/span&gt;
                                &lt;span class="n"&gt;ContentType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"application/pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                &lt;span class="n"&gt;FilePath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Your File Path.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="p"&gt;}&lt;/span&gt;
                        &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="p"&gt;};&lt;/span&gt;

                    &lt;span class="c1"&gt;// Send document&lt;/span&gt;
                    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentCreated&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;documentClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Document sent successfully. Document ID: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;documentCreated&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;
    &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your API Key &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ApiClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;document_api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DocumentApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Signature field
&lt;/span&gt;        &lt;span class="n"&gt;signature_field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Signature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Total vehicle value
&lt;/span&gt;        &lt;span class="n"&gt;textbox1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;textbox1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TextBox&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;validationType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NumbersOnly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Deposit amount
&lt;/span&gt;        &lt;span class="n"&gt;textbox2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;textbox2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TextBox&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;validationType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NumbersOnly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Balance formula
&lt;/span&gt;    &lt;span class="n"&gt;formula_balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FormulaBalance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Formula&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;formulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;formulaExpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[textbox1] - [textbox2]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;decimalPrecision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;#  Signing date
&lt;/span&gt;    &lt;span class="n"&gt;signing_date_field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SigningDate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DateSigned&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Payment date (seven days after signing date)
&lt;/span&gt;    &lt;span class="n"&gt;payment_date_field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PaymentDate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;fieldType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Formula&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;pageNumber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;formulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;formulaExpression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AddDays([SigningDate], 7)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Signer with all fields
&lt;/span&gt;    &lt;span class="n"&gt;document_signer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;David&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;emailAddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;david@cubeflakes.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;signerType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Signer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;formFields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="n"&gt;signature_field&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;formula_balance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;signing_date_field&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;payment_date_field&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;send_for_sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SendForSign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vehicle Sales Agreement&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your file path.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;signers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;document_signer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;document_created&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;send_for_sign&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;require_once&lt;/span&gt; &lt;span class="s2"&gt;"vendor/autoload.php"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Configuration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;BoldSign\Api\DocumentApi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;BoldSign\Model\&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;SendForSign&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;FileInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nc"&gt;EditableDateFieldSettings&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Your API Key'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Signature field&lt;/span&gt;
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Signature'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="c1"&gt;// Total vehicle value&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'textbox1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'TextBox'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setValidationType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'NumbersOnly'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setIsRequired&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Deposit amount&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'textbox2'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'TextBox'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setValidationType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'NumbersOnly'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setIsRequired&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Signing date&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SigningDate'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'DateSigned'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setIsRequired&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Payment date (seven days after signing date)&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PaymentDate'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Formula'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormulaExpression&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'AddDays([SigningDate],7)'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$paymentSettings&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Balance formula&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Balance'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Formula'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormulaExpression&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'[textbox1] - [textbox2]'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$balanceSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setDecimalPrecision&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$balanceField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormulaFieldSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$balanceSettings&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Signer&lt;/span&gt;
    &lt;span class="nv"&gt;$document_signer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$document_signer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"David"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_signer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEmailAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"david@cubeflakes.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_signer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setSignerType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Signer"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document_signer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormFields&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$textbox1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$textbox2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$signingDateField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$paymentDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$balanceField&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$send_for_sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SendForSign&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$send_for_sign&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFiles&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'Non Disclosure Agreement.pdf'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$send_for_sign&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setSigners&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;$document_signer&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$send_for_sign&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Vehicle Sales Agreement'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Send document&lt;/span&gt;
    &lt;span class="nv"&gt;$document_created&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$document_api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;sendDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$send_for_sign&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="nc"&gt;ApiClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDefaultApiClient&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setApiKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Your API Key"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;DocumentApi&lt;/span&gt; &lt;span class="n"&gt;documentApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentApi&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="c1"&gt;// Signature field&lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;signatureField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIGNATURE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="c1"&gt;// Total vehicle value&lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;vehicleValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"textbox1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TEXT_BOX&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setValidationType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ValidationTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NUMBERS_ONLY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="c1"&gt;// Deposit amount&lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;depositAmount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"textbox2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TEXT_BOX&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setValidationType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ValidationTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NUMBERS_ONLY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="c1"&gt;// Signing date &lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;signingDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SigningDate"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="no"&gt;DATE_SIGNED&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
            &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDateFormat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
            &lt;span class="c1"&gt;// Payment date&lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;paymentDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
             &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PaymentDate"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
             &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FORMULA&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
             &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
             &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt; &lt;span class="n"&gt;paymentSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
             &lt;span class="n"&gt;paymentSettings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFormulaExpression&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AddDays([SigningDate],7)"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
             &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFormulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="n"&gt;paymentSettings&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="c1"&gt;// Balance &lt;/span&gt;
            &lt;span class="nc"&gt;FormField&lt;/span&gt; &lt;span class="n"&gt;balanceField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;balanceField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Balance"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;balanceField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFieldType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FORMULA&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;balanceField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPageNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;balanceField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBounds&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt; &lt;span class="n"&gt;balanceSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;balanceSettings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFormulaExpression&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[textbox1] - [textbox2]"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  
            &lt;span class="n"&gt;balanceSettings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDecimalPrecision&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;balanceField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFormulaFieldSettings&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;balanceSettings&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="c1"&gt;// Signer&lt;/span&gt;
            &lt;span class="nc"&gt;DocumentSigner&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"David"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEmailAddress&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"david@cubeflakes.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSignerType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SignerTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIGNER&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFormFields&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;signatureField&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;vehicleValue&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;depositAmount&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;signingDate&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;paymentDate&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;balanceField&lt;/span&gt;
            &lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="c1"&gt;// Send document&lt;/span&gt;
            &lt;span class="nc"&gt;SendForSign&lt;/span&gt; &lt;span class="n"&gt;sendForSign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SendForSign&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Your file path.pdf"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
            &lt;span class="n"&gt;sendForSign&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFiles&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;sendForSign&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSigners&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signer&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;sendForSign&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setTitle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Vehicle Sales Agreement"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;DocumentCreated&lt;/span&gt; &lt;span class="n"&gt;documentCreated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;documentApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sendDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sendForSign&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Document created: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;documentCreated&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDocumentId&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DocumentApi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SendForSign&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;boldsign&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;documentApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Your API KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Signature field&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signatureField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Total vehicle value&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;textbox1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;textbox1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TextBox&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;validationType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NumbersOnly&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Deposit amount&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;textbox2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;textbox2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TextBox&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;validationType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NumbersOnly&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Balance formula&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formulaBalance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FormulaBalance&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Formula&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formulaFieldSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;formulaExpression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[textbox1] - [textbox2]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;decimalPrecision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="c1"&gt;// Signing date&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signingDateField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SigningDate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DateSigned&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Payment date (seven days after signing date)&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paymentDateField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PaymentDate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Formula&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formulaFieldSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;formulaExpression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AddDays([SigningDate], 7)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// Signer with all fields&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentSigner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;documentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;David&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;documentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emailAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;david@cubeflakes.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;documentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signerType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SignerTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;documentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formFields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nx"&gt;signatureField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;textbox1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;textbox2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;formulaBalance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;signingDateField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;paymentDateField&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createReadStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Your File Path.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sendForSign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SendForSign&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;sendForSign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vehicle Sales Agreement&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;sendForSign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;documentSigner&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;sendForSign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentCreated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documentApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendForSign&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the code examples above, replace the placeholders &lt;strong&gt;Your API Key&lt;/strong&gt; and file path with your actual API key and the correct file path. In the formula expression section, use only the field ID. Once executed, the document will be sent to the specified signers, and any formula fields will automatically calculate values based on their input in real time, as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw438ew77jpfnlmdxe3jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw438ew77jpfnlmdxe3jy.png" alt="Formula Fields"&gt;&lt;/a&gt;Formula Fields&lt;/p&gt;

&lt;h2&gt;
  
  
  What best practices help formula fields work reliably?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Keep formulas simple:&lt;/strong&gt; Avoid overly complex expressions for clarity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Validate inputs:&lt;/strong&gt; Use NumbersOnly or other validation types.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use decimal precision wisely:&lt;/strong&gt; Match financial standards in your industry.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Test templates:&lt;/strong&gt; Send sandbox documents to confirm formulas work as expected.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Think about the user experience:&lt;/strong&gt; Place formula fields logically so signers see results immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using formula fields via API brings a new level of automation to your e-signature workflows. Whether you’re in sales, finance, HR, or legal, this feature can help you deliver smarter, faster, and more reliable documents.&lt;/p&gt;

&lt;p&gt;Ready to automate your document calculations? Try out formula fields with BoldSign today!&lt;/p&gt;

&lt;p&gt;Sign up for a &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;free sandbox account&lt;/a&gt; and explore our &lt;a href="https://developers.boldsign.com/api-overview/getting-started" rel="noopener noreferrer"&gt;developer documentation&lt;/a&gt; to learn more about our APIs. For any assistance, visit our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support portal&lt;/a&gt; to connect with our team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/creating-conditional-fields-to-the-documents/" rel="noopener noreferrer"&gt;Creating Conditional Fields in eSignature Documents with the BoldSign API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/organize-esignature-documents-using-boldsign-tags/" rel="noopener noreferrer"&gt;Organize Your eSignature Documents Using BoldSign Tags&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/automate-calculations-esignatures-formula-fields/" rel="noopener noreferrer"&gt;Automate Calculations in eSignature Documents with Formula Fields&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>calculator</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>ASP.NET Core Minimal APIs: When to Use Them and When Not To Use Them</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 29 Apr 2026 03:44:33 +0000</pubDate>
      <link>https://dev.to/boldsign/aspnet-core-minimal-apis-when-to-use-them-and-when-not-to-use-them-55hg</link>
      <guid>https://dev.to/boldsign/aspnet-core-minimal-apis-when-to-use-them-and-when-not-to-use-them-55hg</guid>
      <description>&lt;p&gt;Minimal APIs are an endpoint-first way to build HTTP APIs in ASP.NET Core by mapping routes directly to handlers (no controllers required). They’re best for teams building small-to-medium, bounded services (microservices, BFFs, webhooks, internal APIs) that want fast iteration with less ceremony, &lt;em&gt;as long as you add structure early&lt;/em&gt;. They solve the “too much framework for a small API” problem, and they matter because choosing the wrong model (or letting Program.cs become a dumping ground) creates long-term maintenance pain.&lt;/p&gt;

&lt;h2&gt;
  
  
  What decision should you make: Minimal APIs or Controllers?
&lt;/h2&gt;

&lt;p&gt;Use this checklist and pick the first match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Minimal APIs when your API is bounded and you can enforce conventions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You’re building a focused service boundary (webhooks, microservice, BFF, internal tool API).&lt;/li&gt;
&lt;li&gt;  You can enforce a module convention (route groups + one file per feature).&lt;/li&gt;
&lt;li&gt;  Your team likes explicit routing and fluent metadata (OpenAPI tags, response types).&lt;/li&gt;
&lt;li&gt;  You want cross-cutting behavior via middleware + endpoint filters rather than MVC filters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Choose Controllers when the API surface is large or the team is large&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You expect many endpoints across multiple domains/features.&lt;/li&gt;
&lt;li&gt;  You rely heavily on attribute-driven conventions (routing/filters/versioning patterns).&lt;/li&gt;
&lt;li&gt;  Many developers contribute and you need high discoverability via familiar conventions.&lt;/li&gt;
&lt;li&gt;  Your org already has controller-first templates, libraries, or standards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you can’t commit to a module convention on day 1, controllers are usually the safer default.&lt;/p&gt;

&lt;h2&gt;
  
  
  What will you build in this guide?
&lt;/h2&gt;

&lt;p&gt;You’ll build a production-shaped Minimal API starter with one clear outcome:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;End result:&lt;/strong&gt; A Minimal API that’s structured with route groups + feature modules, uses endpoint-filter validation, returns consistent Problem Details errors, exposes OpenAPI docs, and is verifiable with curl + an integration test.&lt;/p&gt;

&lt;h2&gt;
  
  
  What prerequisites do you need before starting?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  .NET SDK installed&lt;/li&gt;
&lt;li&gt;  Basic C# knowledge&lt;/li&gt;
&lt;li&gt;  Terminal access (PowerShell/Bash)&lt;/li&gt;
&lt;li&gt;  Optional: Postman/Insomnia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; dotnet –version prints a version successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a Minimal API request flow work in production?
&lt;/h2&gt;

&lt;p&gt;A[HTTP Request] –&amp;gt; B[Middleware pipeline]&lt;/p&gt;

&lt;p&gt;B –&amp;gt; C[Routing selects endpoint]&lt;/p&gt;

&lt;p&gt;C –&amp;gt; D[Endpoint filters (optional)]&lt;/p&gt;

&lt;p&gt;D –&amp;gt; E[Handler runs]&lt;/p&gt;

&lt;p&gt;E –&amp;gt; F[Result writes response (JSON, status code)]&lt;/p&gt;

&lt;p&gt;F –&amp;gt; G[HTTP Response]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; You can point to exactly where you’ll put (1) global behavior (middleware), (2) per-feature behavior (endpoint filters), and (3) business orchestration (handlers).&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you avoid a giant Program.cs with Minimal APIs?
&lt;/h2&gt;

&lt;p&gt;Use a feature-module convention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Program.cs only wires dependencies, middleware, and “maps modules”&lt;/li&gt;
&lt;li&gt;  Endpoints/Endpoints.cs defines routes for a feature via a route group&lt;/li&gt;
&lt;li&gt;  Infrastructure/ holds cross-cutting filters (validation, correlation, etc.)&lt;/li&gt;
&lt;li&gt;  Services/ holds business logic (handlers stay thin)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; You can add a new feature by creating one new Endpoints/*Endpoints.cs file, without touching existing endpoint files.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you build the production starter step by step?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) How do you create a Minimal API project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    dotnet new web &lt;span class="nt"&gt;-n&lt;/span&gt; MinimalApiStarter 
    &lt;span class="nb"&gt;cd &lt;/span&gt;MinimalApiStarter 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; dotnet run starts the server without errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) How do you enable OpenAPI document generation?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    Add the official OpenAPI package: 
    dotnet add package Microsoft.AspNetCore.OpenApi 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Package install succeeds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) How do you create a service layer so handlers don’t become “mini controllers”?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="n"&gt;Create&lt;/span&gt; &lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ProductService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
    &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;CreateProductRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IProductService&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;GetAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;CreateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateProductRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductService&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IProductService&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;GetAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;404&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10m&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;CreateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateProductRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; No ASP.NET-specific types appear in the service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) How do you centralize validation using an endpoint filter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="n"&gt;Create&lt;/span&gt; &lt;span class="n"&gt;Infrastructure&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ValidateCreateProductFilter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Http.HttpResults&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Infrastructure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ValidateCreateProductFilter&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IEndpointFilter&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;ValueTask&lt;/span&gt; &lt;span class="nf"&gt;InvokeAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="n"&gt;EndpointFilterInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="n"&gt;EndpointFilterDelegate&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OfType&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

           &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
               &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TypedResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Request body is required."&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

           &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

           &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
              &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"Name is required."&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

           &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
              &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"Price must be &amp;gt;= 0."&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

           &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
               &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TypedResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ValidationProblem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Validation rules are written once and reused, handlers stay clean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5) How do you define endpoints as a feature module with a route group?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="n"&gt;Create&lt;/span&gt; &lt;span class="n"&gt;Endpoints&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ProductsEndpoints&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Http.HttpResults&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Infrastructure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Endpoints&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductsEndpoints&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;RouteGroupBuilder&lt;/span&gt; &lt;span class="nf"&gt;MapProductsEndpoints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="n"&gt;IEndpointRouteBuilder&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithTags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Products"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RequireAuthorization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/{id:int}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Results&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;,&lt;/span&gt; &lt;span class="n"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;IProductService&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;TypedResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TypedResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Produces&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;StatusCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status200OK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Produces&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StatusCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status404NotFound&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Created&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;CreateProductRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;IProductService&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ct&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TypedResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Created&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"/api/products/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;created&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;created&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEndpointFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ValidateCreateProductFilter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Produces&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductDto&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;StatusCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status201Created&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ProducesValidationProblem&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;group&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; No endpoints are mapped inside Program.cs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6) How do you wire auth, ProblemDetails, OpenAPI, and modules in Program.cs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="n"&gt;Replace&lt;/span&gt; &lt;span class="n"&gt;Program&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Endpoints&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;MinimalApiStarter.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// OpenAPI document generation&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Problem Details support (standardized error shape)&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddProblemDetails&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Demo authorization policy (replace with real auth in production)&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddAuthorization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddPolicy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;policy&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RequireAssertion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddScoped&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Centralized exception handler (works well with ProblemDetails)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseExceptionHandler&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseAuthorization&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Expose OpenAPI JSON endpoint&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapOpenApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Map feature modules&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapProductsEndpoints&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// For integration tests (WebApplicationFactory)&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; dotnet run compiles and starts successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you test and verify the API?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How do you run the API locally?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    dotnet run 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How do you verify GET returns a product?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-i&lt;/span&gt; http://localhost:5000/api/products/1 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;200 OK &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JSON like: {“id”:1,”name”:”Demo”,”price”:10} &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; You get a 200 with JSON for /1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you verify GET returns 404 for missing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-i&lt;/span&gt; http://localhost:5000/api/products/404 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  404 Not Found&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; /404 returns 404.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you verify validation runs via the endpoint filter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;cURL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:5000/api/products &lt;span class="se"&gt;\ &lt;/span&gt;
      &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\ &lt;/span&gt;
      &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:-1}"&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  400 Bad Request &lt;/li&gt;
&lt;li&gt;  A validation payload (from ValidationProblem) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Validation fails before the handler runs.&lt;/p&gt;

&lt;p&gt;How do you verify OpenAPI is being generated?&lt;/p&gt;

&lt;p&gt;Fetch the OpenAPI JSON exposed by MapOpenApi() (path depends on your ASP.NET Core version/config). Confirm you see a JSON document containing /api/products/{id} and /api/products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; OpenAPI JSON includes your endpoints and response metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you add an integration test to prove endpoint wiring works?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) How do you add a test project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    dotnet new xunit &lt;span class="nt"&gt;-n&lt;/span&gt; MinimalApiStarter.Tests 
    dotnet add MinimalApiStarter.Tests reference MinimalApiStarter 
    dotnet add MinimalApiStarter.Tests package Microsoft.AspNetCore.Mvc.Testing 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2) How do you write a minimal integration test?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="n"&gt;Create&lt;/span&gt; &lt;span class="n"&gt;MinimalApiStarter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tests&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ProductsApiTests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Net&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Mvc.Testing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Xunit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductsApiTests&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IClassFixture&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;_client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductsApiTests&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WebApplicationFactory&lt;/span&gt; &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="n"&gt;_client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
        &lt;span class="p"&gt;}&lt;/span&gt; 

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;Get_Product_ReturnsOk&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products/1"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
            &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpStatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
        &lt;span class="p"&gt;}&lt;/span&gt; 

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Fact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;Get_MissingProduct_ReturnsNotFound&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/products/404"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
            &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpStatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
        &lt;span class="p"&gt;}&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;.NET&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    dotnet &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Tests pass and confirm routing + module mapping works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the most common production mistakes with Minimal APIs and how do you fix them?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Why did my Minimal API turn into a “giant Program.cs”?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; You mapped endpoints directly in Program.cs as the project grew.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Move each feature into Endpoints/_Endpoints.cs with Map_Endpoints().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Why are my endpoints inconsistent (validation, errors, logging)?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Each handler does its own checks and error shapes.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Use endpoint filters for validation, and standardize error responses using Problem Details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Why does RequireAuthorization(“api”) throw “policy not found”?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Policy wasn’t registered or name mismatch.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Ensure AddAuthorization(options =&amp;gt; options.AddPolicy(“api”, …)) matches exactly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Why does my POST look like the handler runs even with bad input?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; Validation is in-handler, or the filter wasn’t applied.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Confirm .AddEndpointFilter() is on the endpoint or group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5) Why is my OpenAPI endpoint returning 404?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt; OpenAPI services weren’t added or endpoint wasn’t mapped.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; Confirm builder.Services.AddOpenApi() and app.MapOpenApi() are both present.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did you achieve, and what should you do next?
&lt;/h2&gt;

&lt;p&gt;You now have a Minimal API starter that’s intentionally “production-shaped”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Route groups + feature modules&lt;/strong&gt; keep code discoverable &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Endpoint-filter validation&lt;/strong&gt; keeps handlers thin &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;ProblemDetails&lt;/strong&gt; gives predictable error responses &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;OpenAPI generation&lt;/strong&gt; keeps API docs accurate &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration tests&lt;/strong&gt; prove wiring won’t regress &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next step:&lt;/strong&gt; Replace the demo authorization policy with real authentication (JWT/OAuth), then align your API security checklist with OWASP’s API Security Top 10.&lt;/p&gt;

&lt;p&gt;Start today and unlock all features of BoldSign.&lt;/p&gt;

&lt;p&gt;Need assistance? Request a &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;demo&lt;/a&gt; or visit our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;Support Portal&lt;/a&gt; for quick help.&lt;/p&gt;

&lt;p&gt;Bring fast, secure eSignatures to your Minimal APIs with BoldSign’s developer-friendly API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Try BoldSign API Free&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/long-running-tasks-asp-net-core-best-practices/" rel="noopener noreferrer"&gt;Mastering Long-Running Tasks in ASP.NET Core Without Blocking Requests&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/aspnet-core-jwt-authentication-guide/" rel="noopener noreferrer"&gt;ASP.NET Core JWT Authentication: Setup, Validation, and Best Practices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/aspnet-core-background-jobs-hosted-services-hangfire-quartz/" rel="noopener noreferrer"&gt;Modern Background Jobs in ASP.NET Core: Comparing Hosted Services, Hangfire, and Quartz.NET&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt; &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>api</category>
      <category>esignatureapi</category>
      <category>documents</category>
    </item>
    <item>
      <title>Prevent “I Didn’t Sign This” Claims with ID Verification Methods &amp; Audit Trails</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 28 Apr 2026 05:29:15 +0000</pubDate>
      <link>https://dev.to/boldsign/prevent-i-didnt-sign-this-claims-with-id-verification-methods-audit-trails-4h57</link>
      <guid>https://dev.to/boldsign/prevent-i-didnt-sign-this-claims-with-id-verification-methods-audit-trails-4h57</guid>
      <description>&lt;p&gt;“I didn’t sign this” claims, also known as repudiation claims, pose a serious risk in electronic signature workflows. They can delay deals, trigger costly disputes, damage trust, and create compliance issues, especially for legal paperwork, high‑value contracts, financial documents, and HR agreements. BoldSign effectively minimizes these risks by combining advanced signer &lt;a href="https://boldsign.com/electronic-signature-features/signer-identity-verification?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;identity verification&lt;/a&gt; with comprehensive, tamper-evident &lt;a href="https://support.boldsign.com/kb/article/14647/information-the-audit-trail-document-contains" rel="noopener noreferrer"&gt;audit trails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This layered approach delivers undeniable proof of who signed, when they signed, their intent, and that the document remained unchanged, ensuring strong non-repudiation and legally defensible agreements.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are repudiation claims
&lt;/h2&gt;

&lt;p&gt;Repudiation claims happen when a signer denies signing a document or claims the signature was unauthorized, forged, or completed through a compromised account. In electronic signature workflows, these disputes can delay agreements, create legal challenges, and increase operational risk. They are especially common in low-security workflows that rely only on email access without stronger identity checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the risk of repudiation in electronic signatures
&lt;/h2&gt;

&lt;p&gt;Repudiation occurs when a signer denies signing a document, claiming it was forged, unauthorized, or completed through a compromised account. This is more common in basic email-only workflows with minimal identity checks. High-value or regulated agreements are especially vulnerable, as disputes can invalidate contracts, lead to legal challenges, and cause financial or operational harm.&lt;/p&gt;

&lt;p&gt;For an electronic signature to be enforceable and provide non-repudiation, it must prove three key elements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Signer intent –&lt;/strong&gt; Clear evidence they meant to sign.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Signer identity –&lt;/strong&gt; Reasonable (or strong) confirmation of who they are.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Document integrity –&lt;/strong&gt; Proof the document wasn’t altered after signing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BoldSign exceeds these requirements through layered &lt;a href="https://boldsign.com/security-policy?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;security features&lt;/a&gt;, making repudiation claims extremely difficult to sustain.&lt;/p&gt;

&lt;h2&gt;
  
  
  BoldSign’s advanced identity verification methods
&lt;/h2&gt;

&lt;p&gt;BoldSign offers flexible, multi-layered &lt;a href="https://support.boldsign.com/kb/article/20362/authentication-frequency-settings" rel="noopener noreferrer"&gt;authentication options&lt;/a&gt; to confirm the signer is the authorized person before they access or complete the document. You can apply these selectively per signer (including in multi-party workflows) or standardize them via templates.&lt;/p&gt;

&lt;p&gt;Key methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Email OTP –&lt;/strong&gt; A one-time password sent to the signer’s email; they must enter it to proceed, confirming email ownership.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;SMS OTP –&lt;/strong&gt; A one‑time code sent to the signer’s phone by text message.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Access Code –&lt;/strong&gt; A custom PIN you create and share securely through a separate channel; the signer enters it for access.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Government ID Verification with Biometric Selfie –&lt;/strong&gt; For higher-risk documents, require:

&lt;ul&gt;
&lt;li&gt;  Upload of a government-issued ID (e.g., passport, driver’s license, national ID card).&lt;/li&gt;
&lt;li&gt;  A live biometric selfie.&lt;/li&gt;
&lt;li&gt;  Advanced matching (powered by technology like &lt;a href="https://support.boldsign.com/kb/article/15462/what-is-identity-verification-in-boldsign" rel="noopener noreferrer"&gt;Stripe Identity&lt;/a&gt;) compares the selfie to the ID photo, with configurable strictness levels (strict, moderate, lenient) and options like live document capture to prevent photos or photocopies.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnt2kva07ft559p22qsqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnt2kva07ft559p22qsqv.png" alt="Identity Verification" width="800" height="368"&gt;&lt;/a&gt;Identity Verification&lt;/p&gt;

&lt;p&gt;These controls, especially government ID with a selfie, tie the signing process to real‑world identity and significantly reduce impersonation and unauthorized access risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does an audit trail prove
&lt;/h2&gt;

&lt;p&gt;Every BoldSign document includes a detailed, tamper-evident audit trail that logs the entire signing process. This creates a consistent, court-admissible record supporting non-repudiation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The audit trail typically captures:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Precise timestamps for events (sent, viewed, authenticated, signed, completed).&lt;/li&gt;
&lt;li&gt;  IP addresses and device details.&lt;/li&gt;
&lt;li&gt;  Authentication activity, including methods used such as OTP, access code, and ID verification.&lt;/li&gt;
&lt;li&gt;  Signer actions and consent to electronic disclosures.&lt;/li&gt;
&lt;li&gt;  Document integrity verification, using cryptographic hashes to confirm that no alterations were made after signing.&lt;/li&gt;
&lt;li&gt;  Sender and recipient information, including names and email addresses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After completion, download the audit trail as a branded PDF (separately or combined with the signed document). It is digitally signed to prevent tampering, ensuring reliability for reviews, audits, or disputes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do ID verification and audit trails work together
&lt;/h2&gt;

&lt;p&gt;This combination forms a powerful, multi-layered defense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Identity is verified upfront – Blocking unauthorized users before access.&lt;/li&gt;
&lt;li&gt;  Every key action is logged – With timestamps, IP/device data, and verification outcomes.&lt;/li&gt;
&lt;li&gt;  Integrity is preserved – Through hashes and tamper-evident records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they generate a complete evidence package: Proven identity + documented intent + unaltered document. This makes repudiation claims unsustainable and supports compliance with standards like ESIGN Act, UETA, and eIDAS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key business benefits
&lt;/h2&gt;

&lt;p&gt;Here’s how these features translate into real business advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Stronger legal defensibility – Meets or exceeds global &lt;a href="https://app.boldsign.com/settings/compliance/" rel="noopener noreferrer"&gt;e-signature laws&lt;/a&gt; with verifiable non-repudiation.&lt;/li&gt;
&lt;li&gt;  Fewer disputes and faster resolution – Clear and reliable evidence minimizes challenges and speeds up issue handling.&lt;/li&gt;
&lt;li&gt;  Enhanced trust – Signers, partners, legal teams, and stakeholders gain confidence from robust security.&lt;/li&gt;
&lt;li&gt;  Flexible security – Apply stricter verification only where needed (e.g., high-value documents), balancing protection with efficiency.&lt;/li&gt;
&lt;li&gt;  Operational efficiency – Avoids costly delays from repudiation claims and streamlines workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;“I didn’t sign this” claims don’t have to derail your agreements. BoldSign’s robust identity verification paired with detailed, tamper-evident audit trails provides strong proof of identity, intent, and document integrity, virtually eliminating repudiation risks.&lt;/p&gt;

&lt;p&gt;Secure your high-value or regulated workflows with confidence. Try &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign free&lt;/a&gt; and explore powerful audit logging, automated workflows, and secure signing.&lt;/p&gt;

&lt;p&gt;Have questions? Our team is here, schedule a &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;demo&lt;/a&gt; and get expert &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/audit-trails-download-api-boldsign/" rel="noopener noreferrer"&gt;How to Download an Audit Trail PDF Using the BoldSign API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/e-signature-audit-trails-why-they-matter/" rel="noopener noreferrer"&gt;E-Signature Audit Trail: Why They Matter for Compliance&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/construction-audit-trail-approvals/" rel="noopener noreferrer"&gt;Track Approvals and Sign-Offs with a Construction Audit Trail&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>idverification</category>
      <category>auditrial</category>
      <category>documents</category>
    </item>
    <item>
      <title>Free Email QR Code Generator for Ready‑to‑Use Email Drafts</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 27 Apr 2026 05:34:12 +0000</pubDate>
      <link>https://dev.to/boldsign/free-email-qr-code-generator-for-ready-to-use-email-drafts-12k3</link>
      <guid>https://dev.to/boldsign/free-email-qr-code-generator-for-ready-to-use-email-drafts-12k3</guid>
      <description>&lt;p&gt;We are excited to introduce the free BoldSign &lt;a href="https://boldsign.com/email-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Email QR Code Generator&lt;/a&gt;, a simple and secure tool that helps anyone share a complete email template, including email address, subject, and message, with a quick scan. Whether you’re a freelancer adding contact details to business cards, a professional sharing support information on brochures, or a small business placing QR codes on packaging, this tool makes communication effortless. There is no software to install, no account required, and no cost. Everything runs inside your browser, keeping your information private and helping you connect faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose the free BoldSign Email QR Code Generator
&lt;/h2&gt;

&lt;p&gt;Our email QR code generator is built for convenience, privacy, and professional results. It works entirely inside your browser, so your email information is never stored. It is perfect for professionals, creators, and businesses who want a quick way for people to reach their inbox.&lt;/p&gt;

&lt;p&gt;Here are the main reasons for choosing our tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Completely free&lt;/strong&gt;: No sign up, no fees, and no restrictions. Create email QR codes online for free.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Privacy first:&lt;/strong&gt; All processing happens on your device. Your information is never saved or shared.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Professional look&lt;/strong&gt;: Generate clean and polished QR codes ideal for business cards, posters, menus, flyers, resumes, and printed materials.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Works everywhere&lt;/strong&gt;: Create email QR codes from your phone, tablet, or computer without installing anything.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Fast and simple&lt;/strong&gt;: Add your email address, subject, or message and generate a QR code in seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key features of the free Email QR Code Generator
&lt;/h2&gt;

&lt;p&gt;Whether you’re sharing a support email or a personal contact address, these features make BoldSign your go‑to solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Custom email details&lt;/strong&gt;: Add your email address along with a subject and an optional predefined message so people can contact you instantly with the right context.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;High quality downloads&lt;/strong&gt;: Download clear and print ready QR codes perfect for physical or digital use.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unlimited creation&lt;/strong&gt;: Generate as many email QR codes as you need. There are no limits and no watermarks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Simple customization&lt;/strong&gt;: Adjust the appearance of the QR code if supported on the page, so it matches your brand or design.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Beginner friendly&lt;/strong&gt;: No technical knowledge is needed. Enter your details and download them immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create an email QR code in three simple steps
&lt;/h2&gt;

&lt;p&gt;Getting started takes only a few clicks. Follow these three steps to create your first email QR code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Open the tool&lt;/strong&gt;: Go to the free BoldSign &lt;a href="https://boldsign.com/email-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Email QR Code Generator&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Enter your information&lt;/strong&gt;: Type your email address, subject line, and optional message. Customize the appearance if needed.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Download your email QR Code:&lt;/strong&gt; Save your QR code as PNG, SVG, or JPEG, and display it anywhere so guests can scan and connect instantly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeud2y4511xgrtlt701d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeud2y4511xgrtlt701d.png" alt="" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start sharing your email smarter today
&lt;/h2&gt;

&lt;p&gt;The free BoldSign &lt;a href="https://boldsign.com/email-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Email QR Code Generator&lt;/a&gt; makes sharing your email address fast, simple, and accessible to everyone. Whether you are a freelancer, business owner, job seeker, or student, this tool helps people reach you instantly with a quick scan. There is no cost, no setup, and no technical skills required. Create your QR code in minutes and make communication easier than ever.&lt;/p&gt;

&lt;p&gt;Ready to simplify your document workflows? &lt;a href="https://account.boldsign.com/signup?planId=1018&amp;amp;utm_source=boldsignblogs&amp;amp;utm_medium=redirect&amp;amp;utm_campaign=boldsign&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Sign up for a free 30-day trial&lt;/a&gt; or connect with our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support team&lt;/a&gt; for a personalized &lt;a href="https://boldsign.com/request-demo?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-whatsapp-qr-code-online/" rel="noopener noreferrer"&gt;Free WhatsApp QR Code Generator for Instant Chat Links&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-facebook-qr-code-online/" rel="noopener noreferrer"&gt;Free Facebook QR Code Generator for Profiles, Pages &amp;amp; Posts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/generate-snapchat-qr-code-online/" rel="noopener noreferrer"&gt;Introducing BoldSign’s Snapchat QR Code Generator&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog was originally published at &lt;a href="https://boldsign.com/blogs" rel="noopener noreferrer"&gt;boldsign.com&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>esignature</category>
      <category>email</category>
      <category>qrcode</category>
      <category>documents</category>
    </item>
  </channel>
</rss>
