<?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>Forem: BoldSign</title>
    <description>The latest articles on Forem by BoldSign (@boldsign).</description>
    <link>https://forem.com/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>Forem: BoldSign</title>
      <link>https://forem.com/boldsign</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/boldsign"/>
    <language>en</language>
    <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://forem.com/boldsign/aspnet-core-minimal-apis-when-to-use-them-and-when-not-to-use-them-55hg</link>
      <guid>https://forem.com/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://forem.com/boldsign/prevent-i-didnt-sign-this-claims-with-id-verification-methods-audit-trails-4h57</link>
      <guid>https://forem.com/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://forem.com/boldsign/free-email-qr-code-generator-for-ready-to-use-email-drafts-12k3</link>
      <guid>https://forem.com/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>
    <item>
      <title>BoldSign Edit Document API: Update Signers, Fields, and Files Without Restarting</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 21 Apr 2026 03:44:23 +0000</pubDate>
      <link>https://forem.com/boldsign/boldsign-edit-document-api-update-signers-fields-and-files-without-restarting-2f86</link>
      <guid>https://forem.com/boldsign/boldsign-edit-document-api-update-signers-fields-and-files-without-restarting-2f86</guid>
      <description>&lt;p&gt;Updating documents mid-workflow usually means recreating them, reassigning fields, and disrupting signers. The BoldSign Edit Document API lets you update signer details, fields, metadata, and even files without restarting the signing process.&lt;/p&gt;

&lt;p&gt;This guide is for developers, product teams, and automation engineers working with BoldSign. It explains what the Edit Document API can update, how it works, when to use it, and how to perform safe updates with clear examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  What problem this solves
&lt;/h2&gt;

&lt;p&gt;Most eSignature systems treat documents as nearly immutable once created. Any mistakes, such as incorrect signer emails, missing signature fields, outdated clauses, or wrong files, often require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Recreating the document&lt;/li&gt;
&lt;li&gt;  Reapplying all fields manually&lt;/li&gt;
&lt;li&gt;  Re-inviting all signers&lt;/li&gt;
&lt;li&gt;  Losing audit continuity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The BoldSign Edit Document API eliminates all of these problems.&lt;/p&gt;

&lt;p&gt;It helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Correct signer details without interrupting signing&lt;/li&gt;
&lt;li&gt;  Add or modify fields dynamically&lt;/li&gt;
&lt;li&gt;  Replace or remove files without re uploading a document package&lt;/li&gt;
&lt;li&gt;  Update instructions, messages, or labels instantly&lt;/li&gt;
&lt;li&gt;  Keep workflows running even when your business logic changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How does the BoldSign edit document API work?
&lt;/h2&gt;

&lt;p&gt;The API uses a flexible update model where you send only the changes you need. It supports two modes of processing based on whether the request includes files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the completed (synchronous) mode work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your request does not include files, edits are applied immediately.&lt;/p&gt;

&lt;p&gt;Useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Metadata updates&lt;/li&gt;
&lt;li&gt;  Signer property updates&lt;/li&gt;
&lt;li&gt;  Adding or removing form fields&lt;/li&gt;
&lt;li&gt;  Label changes&lt;/li&gt;
&lt;li&gt;  Reminder setting modifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You receive a response with: &lt;strong&gt;“status”: “Completed”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the queued (asynchronous) mode work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your request includes files, BoldSign processes the update in the background.&lt;/p&gt;

&lt;p&gt;You receive: &lt;strong&gt;“status”: “Queued”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After processing finishes, you receive webhook events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Edited&lt;/strong&gt; → change successful&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;EditFailed&lt;/strong&gt; → change unsuccessful, includes failure reason&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes file replacement safe and traceable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you need document properties before editing?
&lt;/h2&gt;

&lt;p&gt;To update files, signers, or form fields, you must have their corresponding IDs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;fileId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;ignerId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;formFieldId&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These IDs are retrieved from the &lt;a href="https://developers.boldsign.com/documents/document-details-and-status" rel="noopener noreferrer"&gt;Document Properties API&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt; which returns the complete document structure, including all editable resources and their IDs.&lt;/p&gt;

&lt;p&gt;This is mandatory for safe, targeted updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do partial updates differ from nested updates?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What do partial updates change?
&lt;/h3&gt;

&lt;p&gt;Partial updates allow you to send &lt;em&gt;only the fields you want modified&lt;/em&gt;, BoldSign leaves the rest untouched.&lt;br&gt;&lt;br&gt;
Perfect for top level updates such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Message&lt;/li&gt;
&lt;li&gt;  Labels&lt;/li&gt;
&lt;li&gt;  Reminder settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How do nested updates work for files, signers &amp;amp; fields?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nested resources require:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  EditAction = Add | Update | Remove&lt;/li&gt;
&lt;li&gt;  The resource’s ID (&lt;code&gt;fileId, signerId, formFieldId&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Updating a signer requires signerId&lt;/li&gt;
&lt;li&gt;  Removing a form field requires formFieldId&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents overwriting the entire signer or field structure.&lt;/p&gt;
&lt;h2&gt;
  
  
  What you’ll need before calling the edit document API?
&lt;/h2&gt;

&lt;p&gt;Make sure you have the following ready:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; A &lt;a href="https://account.boldsign.com/signup?planId=1076utm_&amp;amp;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;&lt;strong&gt;)&lt;/strong&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; &lt;code&gt;documentId&lt;/code&gt; – The ID of the document you want to edit.&lt;/li&gt;
&lt;li&gt; Property IDs – File IDs, signer IDs, and form field IDs (retrieved via /v1/document/properties).&lt;/li&gt;
&lt;li&gt; Basic API Tooling – Ability to make HTTP calls (e.g., cURL, Postman, or any BoldSign SDK).&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Use one of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;API Key:&lt;/strong&gt; X-API-KEY: &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;OAuth2:&lt;/strong&gt; Authorization: Bearer &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How do you update signers and metadata without editing files?
&lt;/h2&gt;

&lt;p&gt;Because no files are included, this triggers synchronous mode (Completed).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Below is an example code snippet&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;-X&lt;/span&gt; PUT &lt;span class="s1"&gt;'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID'&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;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {API-KEY}'&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;'{
        "Message": "Please sign this document.",
        "Signers": [
            {
                "EditAction": "Update",
                "Id": "YOUR-SIGNER-ID",
                "AuthenticationType": "EmailOTP",
                "FormFields": [
                    {
                        "EditAction": "Add",
                        "FieldType": "TextBox",
                        "Bounds": {
                            "X": 100,
                            "Y": 100,
                            "Width": 100,
                            "Height": 20
                        },
                        "IsRequired": false,
                        "PageNumber": 1
                    }
                ]
            },
            {
                "EditAction": "Add",
                "Name": "Signer",
                "EmailAddress": "signer@gmail.com",
                "AuthenticationType": "AccessCode",
                "AuthenticationCode": "1234",
                "FormFields": [
                    {
                        "EditAction": "Add",
                        "FieldType": "Signature",
                        "Bounds": {
                            "X": 150,
                            "Y": 150,
                            "Width": 200,
                            "Height": 30
                        },
                        "IsRequired": true,
                        "PageNumber": 1
                    }
                ]
            }
        ],
        "Labels": ["Label1", "Label2"],
        "ReminderSettings": {
            "EnableAutoReminder": true,
            "ReminderDays": 2,
            "ReminderCount": 4
        }
    }'&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;// --- Form fields for existing signer ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;textField&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&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;TextBox&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;false&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="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;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;20&lt;/span&gt;&lt;span class="p"&gt;,&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="p"&gt;};&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signerToUpdate&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Update&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;"YOUR-SIGNER-ID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;AuthenticationType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AuthenticationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EmailOTP&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="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;EditFormField&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;textField&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Form fields for new signer ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signatureField&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&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;IsRequired&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&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="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;150&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;150&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="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="p"&gt;};&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signerToAdd&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&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="s"&gt;"Signer"&lt;/span&gt;&lt;span class="p"&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;"signer@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;AuthenticationType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AuthenticationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AccessCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;AuthenticationCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1234"&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="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;EditFormField&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;signatureField&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Signers collection ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentSigners&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;EditDocumentSigner&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;signerToUpdate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;signerToAdd&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Labels ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;labels&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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"Label1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"Label2"&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Reminder settings ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;reminderSettings&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;ReminderSettings&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EnableAutoReminder&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="n"&gt;ReminderCount&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;ReminderDays&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Final request ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;()&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;"YOUR-DOCUMENT-ID"&lt;/span&gt;&lt;span class="p"&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 sign this document."&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="n"&gt;documentSigners&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Labels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ReminderSettings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reminderSettings&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;documentEdited&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;EditDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;editDocumentRequest&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="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;signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Update&lt;/span&gt;&lt;span class="sh"&gt;"&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;YOUR-SIGNER-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;authentication_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EmailOTP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;form_fields&lt;/span&gt;&lt;span class="o"&gt;=&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="nc"&gt;EditFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add&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;is_required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&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;100&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;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                    &lt;span class="n"&gt;page_number&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="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;signer2&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add&lt;/span&gt;&lt;span class="sh"&gt;"&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;Signer22&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;email_address&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@gmail.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;authentication_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AccessCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;authentication_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1234&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;form_fields&lt;/span&gt;&lt;span class="o"&gt;=&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="nc"&gt;EditFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="nb"&gt;type&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;is_required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&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;150&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;page_number&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="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;edit_request&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Please sign this document.&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;signer1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signer2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;labels&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;Label1&lt;/span&gt;&lt;span class="sh"&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;Label2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;reminder_settings&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;ReminderSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;enable_auto_reminder&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;reminder_count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;reminder_days&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&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;edit_document&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;edit_request&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="nc"&gt;BoldSign\Model\EditDocumentRequest&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\Model\EditDocumentSigner&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\Model\EditFormField&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\Model\Rectangle&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\Model\ReminderSettings&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\Model\EditDocumentFile&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;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="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;$formField2&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$formField2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Add"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField2&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="s2"&gt;"TextBox"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField2&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;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField2&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;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;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$formField2&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;$signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Update"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&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="s2"&gt;"YOUR-SIGNER-ID"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setAuthenticationType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"EmailOTP"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&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;$formField2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField3&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$formField3&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Add"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField3&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="s2"&gt;"Signature"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$formField3&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;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;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="nv"&gt;$formField3&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;$signer2&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Add"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&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;"Signer"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&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;"signer@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setAuthenticationType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"AccessCode"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setAuthenticationCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"1234"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer2&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;$formField3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$reminderSettings&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;ReminderSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$reminderSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEnableAutoReminder&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="nv"&gt;$reminderSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setReminderCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$reminderSettings&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setReminderDays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Please sign this document.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&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;$signer1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$signer2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setLabels&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"Label1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Label2"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setReminderSettings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$reminderSettings&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_response&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;editDocument&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;$edit_document_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;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;apiClient&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;Rectangle&lt;/span&gt; &lt;span class="n"&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="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setX&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="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setY&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="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setWidth&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="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHeight&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&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;EditFormField&lt;/span&gt; &lt;span class="n"&gt;formField&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;EditFormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;formField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEditAction&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;EditFormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EditActionEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ADD&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;formField&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;EditFormField&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;formField&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;formField&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="n"&gt;bounds&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentSigner&lt;/span&gt; &lt;span class="n"&gt;signers&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;EditDocumentSigner&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;signers&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;"signer@gmail.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signers&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;"signername"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signers&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;formField&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;signers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEditAction&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EditActionEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ADD&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentRequest&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;editDocumentJsonRequest&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;signers&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="n"&gt;editDocumentJsonRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setMessage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Updated documents"&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;documentId&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="n"&gt;documentApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;editDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;EditFormField&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;ReminderSettings&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentId&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;const&lt;/span&gt; &lt;span class="nx"&gt;bounds1&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;bounds1&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;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;bounds1&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;bounds1&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;bounds1&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;20&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;formField1&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;formField1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditFormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField1&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;EditFormField&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;formField1&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;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField1&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="nx"&gt;bounds1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField1&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&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;YOUR-SIGNER-ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticationType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AuthenticationTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EmailOtp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&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;formField1&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;bounds2&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;bounds2&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;150&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;bounds2&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;bounds2&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;bounds2&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formField3&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;EditFormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;formField3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditFormField&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField3&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;EditFormField&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;formField3&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;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField3&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="nx"&gt;bounds2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;formField3&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signer2&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signer2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer2&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;Signer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer2&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;signer@gmail.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;signer2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticationType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AuthenticationTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AccessCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticationCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1234&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer2&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;formField3&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;reminderSettings&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;ReminderSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;reminderSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enableAutoReminder&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;reminderSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reminderCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;reminderSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reminderDays&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&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;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Please review and sign the attached document.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&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;signer1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signer2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Label1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Label2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reminderSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;reminderSettings&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;editDocumentResponse&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;documentApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;editDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;editDocumentRequest&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 edit files using the edit document API?
&lt;/h2&gt;

&lt;p&gt;Files in the request immediately enable asynchronous processing(Queued).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Remove a file → all form fields linked to that file are automatically removed.&lt;/strong&gt;
(Because the file no longer exists, its fields cannot remain.)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Add a file → the new file is added as the last file in the document.&lt;/strong&gt;
(It appears at the end of the file list; fetch Document Properties to get its new fileId.)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Replace a file → form fields on pages that no longer exist are deleted.&lt;/strong&gt;
(Example: Old file had 5 pages, new file has 3 → fields on pages 4–5 are removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Below is an example code snippet&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;-X&lt;/span&gt; PUT &lt;span class="s1"&gt;'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID'&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;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {API-KEY}'&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;'{
          "files": [
        {
          "editAction": "Add",
          "fileUrl": "YOUR_FILE_URL"
        }
      ]
    }'&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;// File to edit&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editDocumentFile&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;FileUrl&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;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_FILE_URL"&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;filesToEdit&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;EditDocumentFile&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;editDocumentFile&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// Final request&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;()&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;"YOUR-DOCUMENT-ID"&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="n"&gt;filesToEdit&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;documentEdited&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;EditDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;editDocumentRequest&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="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;document_file&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nb"&gt;file&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_PATH&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;edit_request&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;EditDocumentRequest&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="n"&gt;document_file&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&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;edit_document&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;edit_request&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="nc"&gt;BoldSign\Model\EditDocumentRequest&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\Model\EditDocumentFile&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;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="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;$edit_document_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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$document1&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$document1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFileUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_FILE_URL"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$document1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Add'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&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="nv"&gt;$document1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_response&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;editDocument&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;$edit_document_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;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;apiClient&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentFile&lt;/span&gt; &lt;span class="n"&gt;document&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;EditDocumentFile&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEditAction&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;EditDocumentFile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EditActionEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ADD&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFileUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"YOUR_FILE_URL"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentRequest&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;editDocumentJsonRequest&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;document&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;documentId&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="n"&gt;documentApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;editDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;EditDocumentRequest&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentId&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;const&lt;/span&gt; &lt;span class="nx"&gt;documentfile&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;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;documentfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&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&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;documentfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditDocumentFile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Add&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;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&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;documentfile&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;editDocumentResponse&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;documentApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;editDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;editDocumentRequest&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 edit single field to the same signer using the edit document API?
&lt;/h2&gt;

&lt;p&gt;You can update just one property of a signer without resending all their details.&lt;br&gt;&lt;br&gt;
When you update a signer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Only the specific field you send is changed.&lt;/li&gt;
&lt;li&gt;  If you remove a signer, all form fields linked to that signer are automatically removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How do you update only the &lt;em&gt;IsRequired&lt;/em&gt; property on an existing form field?
&lt;/h2&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; PUT &lt;span class="s1"&gt;'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID'&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;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-API-KEY: {API-KEY}'&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": [
            {
                "EditAction": "Update",
                "Id": "YOUR-SIGNER-ID",
                "FormFields": [
                    {
                        "EditAction": "Update",
                        "Id": "YOUR-FIELD-ID",
                        "IsRequired": false
                    }
                ]
            }
        ]
    }'&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signerToUpdate&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;EditAction&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EditAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Update&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;"YOUR-SIGNER-ID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;AuthenticationCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1234"&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Signers collection ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentSigners&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;EditDocumentSigner&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;signerToUpdate&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// --- Final request ---&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;()&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;"YOUR-DOCUMENT-ID"&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="n"&gt;documentSigners&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;documentEdited&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;EditDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;editDocumentRequest&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="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;signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;edit_action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Update&lt;/span&gt;&lt;span class="sh"&gt;"&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;YOUR-SIGNER-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;authentication_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1234&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;edit_request&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;EditDocumentRequest&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;signer1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&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;edit_document&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;edit_request&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="nc"&gt;BoldSign\Model\EditDocumentRequest&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\Model\EditDocumentSigner&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;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="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;$signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEditAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Update"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&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="s2"&gt;"YOUR-SIGNER-ID"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$signer1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setAuthenticationCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"1234"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_request&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;$signer1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$edit_document_response&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;editDocument&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;$edit_document_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;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;apiClient&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentSigner&lt;/span&gt; &lt;span class="n"&gt;signers&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;EditDocumentSigner&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;signers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setAuthenticationCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1234"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signers&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;"YOUR-SIGNER-ID"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;signers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEditAction&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EditActionEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UPDATE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;EditDocumentRequest&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;editDocumentJsonRequest&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;signers&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;documentId&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="n"&gt;documentApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;editDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;editDocumentJsonRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;,&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentId&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;const&lt;/span&gt; &lt;span class="nx"&gt;signer1&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;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editAction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;EditDocumentSigner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EditActionEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&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;YOUR-SIGNER-ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;signer1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticationCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1234&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;editDocumentRequest&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;EditDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;editDocumentRequest&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;signer1&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;editDocumentResponse&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;documentApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;editDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;editDocumentRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can update just one property of a form field, such as &lt;code&gt;IsRequired&lt;/code&gt;, without modifying anything else in the signer or document.&lt;/p&gt;

&lt;h2&gt;
  
  
  What updates are restricted or not allowed when editing documents?
&lt;/h2&gt;

&lt;p&gt;Some elements are immutable for security and compliance reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always immutable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You cannot change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;documentId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Completed signatures&lt;/li&gt;
&lt;li&gt;  Completed signer actions&lt;/li&gt;
&lt;li&gt;  Audit trail entries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Editable only in draft status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These can be changed only when the document is still a draft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Title&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;BrandId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;EnableSigningOrder&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;ScheduledSendTime&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What if the document was created from a template?
&lt;/h2&gt;

&lt;p&gt;When a document is created from a template, certain elements may already be locked based on the template’s settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Templates can restrict editing of files, signers, and form fields.&lt;/li&gt;
&lt;li&gt;  If the template disables editing, you cannot modify existing form fields, signers, or files using the Edit Document API.&lt;/li&gt;
&lt;li&gt;  These restrictions are defined during template creation and enforced to maintain template consistency and compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What changes are restricted after any signer has already signed?
&lt;/h2&gt;

&lt;p&gt;Once any signer has completed signing, the following changes are restricted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Editing the details of a signer who has already signed is not allowed.&lt;/li&gt;
&lt;li&gt;  Removing a signer who has already signed is not allowed.&lt;/li&gt;
&lt;li&gt;  Uploading, replacing, or deleting document files is not allowed.&lt;/li&gt;
&lt;li&gt;  Form fields assigned to a signer who has completed signing cannot be changed.&lt;/li&gt;
&lt;li&gt;  Title, BrandId, and Signing Order cannot be edited after the document has been sent (they are editable only in draft).&lt;/li&gt;
&lt;li&gt;  Labels and hyperlinks cannot be edited or added because a signer has already completed signing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How does the completion and error model work when you edit a document?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  The Edited event confirms that your update was successfully applied. This is especially helpful for edits that were queued because they involved file changes. &lt;a href="https://developers.boldsign.com/webhooks/available-events/" rel="noopener noreferrer"&gt;Available Webhook Events&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  The EditFailed event indicates the update could not be applied. It also includes &lt;strong&gt;error details&lt;/strong&gt;, which you must fix before retrying the edit.&lt;/li&gt;
&lt;li&gt;  File-related edits run in the background and return Queued, so you won’t know the final result immediately. The Edited or EditFailed event is what confirms whether the update eventually succeeded or failed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best practices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What steps should you always follow?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Fetch → Edit → Verify&lt;/li&gt;
&lt;li&gt;  Always retrieve IDs using Document Properties&lt;/li&gt;
&lt;li&gt;  Only send the fields you want to modify&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why editing documents matters for API workflows?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Workflows change often; signer details, clauses, and form fields may need updates after a document is created.&lt;/li&gt;
&lt;li&gt;  Programmatic edits keep workflows running by allowing your backend to adjust documents without restarting the signing process.&lt;/li&gt;
&lt;li&gt;  Reduces human error because updates happen through predictable API calls rather than manual changes.&lt;/li&gt;
&lt;li&gt;  Supports scalable automation where documents can evolve dynamically based on business logic or real time data&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The &lt;a href="https://developers.boldsign.com/documents/edit-document" rel="noopener noreferrer"&gt;Edit Document API&lt;/a&gt; is most useful when your documents need updates after they’ve been created or sent, without disrupting the signing process. Whether you’re correcting signer details, adding new fields, updating instructions, or replacing files, the API lets you make precise changes safely and efficiently. By always fetching Document Properties first, using the right IDs, and understanding when edits run in &lt;em&gt;Completed&lt;/em&gt; vs. &lt;em&gt;Queued&lt;/em&gt; mode, you ensure that updates are applied smoothly and reliably.&lt;/p&gt;

&lt;p&gt;In short, use the Edit Document API whenever your workflow requires mid-process adjustments, automation-friendly updates, or flexible document handling, all while keeping signers uninterrupted and your workflow running cleanly end‑to‑end.&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 Sandbox 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;&lt;/a&gt;&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/visual-studio-enterprise-boldsign-growth/" rel="noopener noreferrer"&gt;Select Visual Studio Enterprise Subscribers: Get 12 Months of BoldSign Growth Plan + 50 API Credits&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/edit-template-api/" rel="noopener noreferrer"&gt;Programmatic Template Editing Using the BoldSign Edit Template API&lt;/a&gt;
&lt;/li&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;/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>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Track Approvals and Sign-Offs with a Construction Audit Trail</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 20 Apr 2026 05:29:50 +0000</pubDate>
      <link>https://forem.com/boldsign/track-approvals-and-sign-offs-with-a-construction-audit-trail-19fm</link>
      <guid>https://forem.com/boldsign/track-approvals-and-sign-offs-with-a-construction-audit-trail-19fm</guid>
      <description>&lt;p&gt;Construction managers know the drill, a change of order needs three signatures, but the PDF on your laptop shows no clue who signed first or whether a subcontractor used an old version. That uncertainty slows projects, causes rework, and risks disputes. You need a clear audit trail that records who approved what (and when), so decisions are verifiable and projects keep moving. BoldSign can store that audit trail as part of each signed construction document without extra paperwork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this topic matters
&lt;/h2&gt;

&lt;p&gt;Construction projects depend on timely, accurate approvals. Missing or unclear approval records lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Costly delays and rework.&lt;/li&gt;
&lt;li&gt;  Risk of non-compliance with contracts or regulations.&lt;/li&gt;
&lt;li&gt;  Disputes that require time-consuming evidence of gathering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A robust audit trail reduces the risks and speeds of decision-making.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple real-life scenario
&lt;/h2&gt;

&lt;p&gt;You’re a site engineer approving RFI responses on your phone between site checks. Later an owner asks – who approved change X and when. Without an audit trail, you guess. With the right audit trail, you pull a single document record showing the approver, timestamp, and the exact file version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Naive approach
&lt;/h3&gt;

&lt;p&gt;Many teams rely on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Folder naming conventions (e.g., v1_FINAL.pdf).&lt;/li&gt;
&lt;li&gt;  Email chains with attachments.&lt;/li&gt;
&lt;li&gt;  Manual sign-off spreadsheets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Names don’t prove who signed.&lt;/li&gt;
&lt;li&gt;  Emails lose context when threads break.&lt;/li&gt;
&lt;li&gt;  Spreadsheets are easy to mis-edit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checkpoint: Don’t rely on file names or fragmented email threads to prove approvals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better approach
&lt;/h3&gt;

&lt;p&gt;Use a structured audit trail attached to each document that captures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Signer identity (name, email, authenticated method)&lt;/li&gt;
&lt;li&gt;  Approval timestamp&lt;/li&gt;
&lt;li&gt;  Document version or hash&lt;/li&gt;
&lt;li&gt;  Action type (approved, rejected, delegated)&lt;/li&gt;
&lt;li&gt;  IP address / device metadata&lt;/li&gt;
&lt;li&gt;  Audit event ID and chain-of-custody information&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Why is this better?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  A single source of truth for every approval&lt;/li&gt;
&lt;li&gt;  Easily searchable and exportable audit records&lt;/li&gt;
&lt;li&gt;  Strong support for electronic signature and compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; A defensible audit trail always links actions to verified identities and exact document versions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example Use Cases
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  Change Orders: See who approved a cost increase and the timestamp for payment release.&lt;/li&gt;
&lt;li&gt;  RFIs: Track which engineer approved an RFI response and which version was attached.&lt;/li&gt;
&lt;li&gt;  Submittals: Keep approvals linked to exact spec versions to avoid on-site mistakes.&lt;/li&gt;
&lt;li&gt;  Claims &amp;amp; Disputes: Exported audit trails show a verifiable chain of custody.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Audit trails help with daily site coordination and provide reliable evidence in disputes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How BoldSign fits this workflow
&lt;/h2&gt;

&lt;p&gt;BoldSign stores the audit trail with every signed document, so you do not juggle separate logs or spreadsheets. When a signature or approval happens, BoldSign records the event details and bundles them with the signed PDF and metadata. That means every change of order, RFI, or submittal can carry its own verifiable approval history.&lt;/p&gt;

&lt;h3&gt;
  
  
  What BoldSign captures for each audit event
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Who acted – name and email, authenticated by the account method&lt;/li&gt;
&lt;li&gt;  When it happened – timestamp in UTC (ISO 8601)&lt;/li&gt;
&lt;li&gt;  What happened – action type and signer role&lt;/li&gt;
&lt;li&gt;  What file was seen – document hash for version proof&lt;/li&gt;
&lt;li&gt;  Where it happened – IP address and basic device info&lt;/li&gt;
&lt;li&gt;  A tamper-evident chain-of-custody log&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Simple workflow to add audit trails to your project folder
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Upload the document to BoldSign App.&lt;/li&gt;
&lt;li&gt; Add signers and approvers in the correct order and require authentication&lt;/li&gt;
&lt;li&gt; Send the approval or signature request.&lt;/li&gt;
&lt;li&gt; Download the signed PDF and the attached audit trail.&lt;/li&gt;
&lt;li&gt; Store both files in the job folder or project system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Refer the details to &lt;a href="https://boldsign.com/blogs/how-to-send-and-sign-documents-online?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Send Document&lt;/a&gt; in BoldSign App and for &lt;a href="https://support.boldsign.com/kb/article/106/download-audit-trail-document" rel="noopener noreferrer"&gt;Audit Trail&lt;/a&gt; details.&lt;/p&gt;

&lt;p&gt;Tip – &lt;a href="https://support.boldsign.com/kb/article/101/combine-signed-and-audit-trail-documents" rel="noopener noreferrer"&gt;Embed the audit summary into the signed PDF&lt;/a&gt; so a portable copy always includes the verification details.&lt;/p&gt;

&lt;h3&gt;
  
  
  BoldSign API examples
&lt;/h3&gt;

&lt;p&gt;These examples show the idea. Replace &lt;strong&gt;YOUR_API_KEY&lt;/strong&gt; and &lt;strong&gt;DOC_ID&lt;/strong&gt; with your account values&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;    &lt;span class="c"&gt;# Send document for signature request&lt;/span&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;'{
        "DisableExpiryAlert": false,
        "ReminderSettings": {
            "ReminderDays": 5,
            "ReminderCount": 3,
            "EnableAutoReminder": true
        },
        "BrandId": "",
        "EnableReassign": true,
        "Message": "",
        "Signers": [
            {
                "Name": "Alex",
                "EmailAddress": "alexgayle@boldsign.dev",
                "SignerType": "Signer",
                "FormFields": [
                    {
                        "Id": "string",
                        "Name": "string",
                        "FieldType": "Signature",
                        "PageNumber": 1,
                        "Bounds": {
                            "X": 50,
                            "Y": 50,
                            "Width": 125,
                            "Height": 25
                        },
                        "IsRequired": true
                    },
                    {
                        "Id": "string",
                        "Name": "string",
                        "FieldType": "Label",
                        "PageNumber": 1,
                        "Bounds": {
                            "X": 150,
                            "Y": 250,
                            "Width": 125,
                            "Height": 25
                        },
                        "IsRequired": true,
                        "Value": "string",
                        "BackgroundHexColor": "string"
                    }
                ],
                "Locale": "EN"
            }
        ],
        "ExpiryDays": 30,
        "EnablePrintAndSign": false,
        "AutoDetectFields": false,
        "OnBehalfOf": "",
        "EnableSigningOrder": false,
        "UseTextTags": false,
        "SendLinkValidTill": "",
        "Files": [
            "data:application/pdf;base64,JVBERi0xLjcKJcfs..."
        ],
        "Title": "Sampledocument",
        "HideDocumentId": false,
        "EnableEmbeddedSigning": false,
        "ExpiryDateType": "Days",
        "ExpiryValue": 60,
        "DisableEmails": false,
        "DisableSMS": false,
        "MetaData": {
        "DocumentType": "new",
        "DocumentCategory": "Software"
      }
      }'&lt;/span&gt;
    //Download Audit trail
    curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s1"&gt;'https://api.boldsign.com/v1/document/downloadAuditLog?documentId={{:documentId}}'&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;/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="c1"&gt;//Send document for Signature request&lt;/span&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="kd"&gt;const&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;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;100&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;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;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;100&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;formField&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;formField&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;formField&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;formField&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="nx"&gt;bounds&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;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;formField&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&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;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;span class="c1"&gt;//Download Audit trail&lt;/span&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="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;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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentStream&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;downloadAuditLog&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_DOCUMENT_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Best practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Enforce signer authentication (SSO or MFA) for critical approval.&lt;/li&gt;
&lt;li&gt;  Embed the audit summary directly into the signed PDF.&lt;/li&gt;
&lt;li&gt;  Use UTC timestamps to avoid time‑zone confusion.&lt;/li&gt;
&lt;li&gt;  Apply document hashes (such as SHA‑256) to prove file integrity.&lt;/li&gt;
&lt;li&gt;  Automate retention policies to meet legal and compliance needs.&lt;/li&gt;
&lt;li&gt;  Train field staff on how to read and verify audit trail details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary table – Naive vs Better approach
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area tracked&lt;/th&gt;
&lt;th&gt;Naive Approach&lt;/th&gt;
&lt;th&gt;Better Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Document retrieval&lt;/td&gt;
&lt;td&gt;Paper stacks or scattered emails, hard to find&lt;/td&gt;
&lt;td&gt;Single signed PDF with an embedded audit trail, quick to locate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approver identity&lt;/td&gt;
&lt;td&gt;Name on a sheet or chat message, approval uncertain&lt;/td&gt;
&lt;td&gt;Verified signer (email + timestamp), who exactly signed and when&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version control&lt;/td&gt;
&lt;td&gt;Manual filenames like “v1_FINAL.pdf”, high risk&lt;/td&gt;
&lt;td&gt;Versioned file with a document hash (exact match proof)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispute resolution&lt;/td&gt;
&lt;td&gt;Slow and unclear, little proof&lt;/td&gt;
&lt;td&gt;Fast verification using the audit JSON and signed PDF, clear evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;An audit trail for construction docs turns messy email threads and ambiguous file names into a clear, verifiable record of who approved what (and when). Capture signer identity, timestamps, document versions, and device metadata; store records immutably; and present them in an easy-to-read export. The result: fewer disputes, faster approvals, and projects that keep moving.&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/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/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;/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>auditrial</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Implementing Multi‑Factor Authentication for Zero‑Trust eSignatures</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Fri, 17 Apr 2026 05:26:00 +0000</pubDate>
      <link>https://forem.com/boldsign/implementing-multi-factor-authentication-for-zero-trust-esignatures-45mb</link>
      <guid>https://forem.com/boldsign/implementing-multi-factor-authentication-for-zero-trust-esignatures-45mb</guid>
      <description>&lt;p&gt;An email link can show where a document was sent, but it does not always prove who actually signed it. A signature without authentication introduces uncertainty and weakens document security. Implementing signer authentication enhances trust by verifying the signer’s identity and ensuring signatures are legally valid and securely executed.&lt;/p&gt;

&lt;p&gt;Multi‑Factor Authentication for Zero‑Trust eSignatures solve this by requiring every signer to verify their identity at the moment of signing. With &lt;a href="https://support.boldsign.com/kb/article/4/add-authentication-to-a-signer" rel="noopener noreferrer"&gt;authentication methods&lt;/a&gt; like Email OTP, SMS OTP, access codes, or &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;ID verification&lt;/a&gt;, organizations can reduce fraud, strengthen compliance, and create more defensible signed documents, while BoldSign keeps the experience smooth and friction‑free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why zero-trust matters in eSignature workflows
&lt;/h2&gt;

&lt;p&gt;Zero‑trust security follows one core principle: Never trust by default. Always verify.&lt;/p&gt;

&lt;p&gt;Email access alone isn’t enough to confirm a signer’s identity. Every signer must verify who they are during signing.&lt;/p&gt;

&lt;p&gt;With eSignatures widely adopted across HR, finance, healthcare, and legal teams, organizations need signatures that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Secure&lt;/li&gt;
&lt;li&gt;  Verifiable&lt;/li&gt;
&lt;li&gt;  Tamper-evident audit trails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This verification‑first approach ensures that every agreement meets those expectations, especially for high‑value or regulated documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication vs verification in eSignatures
&lt;/h2&gt;

&lt;p&gt;These terms are often used interchangeably, but they serve different purposes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Authentication&lt;/strong&gt; answers: &lt;em&gt;Who is signing right now?&lt;/em&gt;
This happens before or during the signing process.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Verification&lt;/strong&gt; answers: &lt;em&gt;Is the signed document authentic and unchanged?&lt;/em&gt;
This happens after signing using audit trails and tamper‑evident records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zero‑trust eSignatures require both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Strong authentication before signing&lt;/li&gt;
&lt;li&gt;  Strong verification evidence after signing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why “email-only signing” is not enough
&lt;/h2&gt;

&lt;p&gt;For high‑value or regulated documents, organizations need stronger access controls. Zero‑trust signing assumes any single factor can fail, which is why additional authentication steps are essential.&lt;/p&gt;

&lt;p&gt;Email links are easy to use, but they don’t prove who is actually opening or signing a document. Risks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Shared inboxes&lt;/li&gt;
&lt;li&gt;  Account takeovers&lt;/li&gt;
&lt;li&gt;  Accidental or intentional forwarding&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why multi-factor authentication
&lt;/h2&gt;

&lt;p&gt;MFA significantly reduces the risk of unauthorized access and identity fraud. For eSignatures, it provides stronger proof that the signer is exactly who they claim to be at the moment of signing.&lt;/p&gt;

&lt;p&gt;Multi‑factor authentication combines two or more signals to confirm identity. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Email link + one‑time passcode&lt;/li&gt;
&lt;li&gt;  Password + phone verification&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  MFA methods you can apply in BoldSign
&lt;/h2&gt;

&lt;p&gt;BoldSign supports &lt;a href="https://boldsign.com/blogs/electronic-signature-authentication-methods?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;multiple signer authentication&lt;/a&gt; options, allowing you to verify signer identity without sacrificing usability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email OTP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A one-time password is sent to the &lt;a href="https://support.boldsign.com/kb/article/4/add-authentication-to-a-signer" rel="noopener noreferrer"&gt;signer’s email&lt;/a&gt; and must be entered to open the document.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Low to medium risk workflows&lt;/li&gt;
&lt;li&gt;  Internal approvals&lt;/li&gt;
&lt;li&gt;  Faster adoption with minimal friction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SMS OTP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A one-time password is sent to the &lt;a href="https://support.boldsign.com/kb/article/13212/add-sms-authentication-to-a-signer" rel="noopener noreferrer"&gt;signer’s phone via SMS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Medium to high risk workflows&lt;/li&gt;
&lt;li&gt;  External agreements where phone possession adds stronger assurance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Access Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You set a code (PIN) and share it with the signer through a separate channel.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Known parties (repeat vendors, employees)&lt;/li&gt;
&lt;li&gt;  Workflows where you want an extra verification step outside email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Identity Verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Signer identity is verified using additional checks to confirm the signer is who they claim to be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  High‑risk or regulated workflows&lt;/li&gt;
&lt;li&gt;  Legal, financial, and compliance‑driven agreements&lt;/li&gt;
&lt;li&gt;  Scenarios requiring stronger assurance of signer identity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ID verification for secure eSignatures
&lt;/h2&gt;

&lt;p&gt;&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;BoldSign’s ID verification&lt;/a&gt; serves as a high‑security authentication method by validating signer identity before access or signing. By combining government‑issued ID checks with biometric verification, it helps prevent fraud and ensures trust in compliance‑critical and high‑risk workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Verifies signers using government‑issued photo IDs&lt;/li&gt;
&lt;li&gt;  Uses biometric selfie checks to prevent impersonation&lt;/li&gt;
&lt;li&gt;  Supports configurable verification frequency and attempt limits&lt;/li&gt;
&lt;li&gt;  Enables selective verification for specific signers&lt;/li&gt;
&lt;li&gt;  Available across web, mobile, and API‑based workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to implement MFA for every signer in BoldSign
&lt;/h2&gt;

&lt;p&gt;A consistent setup helps teams avoid missed steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Define document risk levels&lt;/li&gt;
&lt;li&gt; Choose a default authentication method&lt;/li&gt;
&lt;li&gt; Apply authentication settings in &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;/li&gt;
&lt;li&gt; Assign authentication to each signer in multi‑signer workflows&lt;/li&gt;
&lt;li&gt; Confirm audit trails capture authentication events&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BoldSign gives senders full control over how authentication is applied, making zero‑trust implementation flexible and scalable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How audit trails complete the zero-trust model
&lt;/h2&gt;

&lt;p&gt;Authentication reduces unauthorized access. &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; provide the evidence if questions arise later.&lt;/p&gt;

&lt;p&gt;BoldSign audit trails record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Who accessed and signed the document&lt;/li&gt;
&lt;li&gt;  When each action occurred&lt;/li&gt;
&lt;li&gt;  Which authentication method was used&lt;/li&gt;
&lt;li&gt;  IP address and device information&lt;/li&gt;
&lt;li&gt;  Document integrity through tamper detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, authentication and audit trails support compliance reviews and dispute resolution.&lt;/p&gt;

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

&lt;p&gt;Zero-trust eSignatures make digital signing more than just fast. They make it trustworthy. By requiring every signer to verify their identity before signing and backing each action with a detailed audit trail, organizations can reduce fraud, prevent disputes, and strengthen compliance across critical workflows.&lt;/p&gt;

&lt;p&gt;With &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&lt;/a&gt;, teams can apply the right level of authentication for every document, from simple approvals to high-risk agreements. Start with a baseline MFA method for all signers, then add stronger verification for sensitive transactions when needed. That way, every signature is not only easy to collect, but also easier to trust.&lt;/p&gt;

&lt;p&gt;Make every signature easier to trust. &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; and see how zero-trust signing works in practice.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/mandating-signer-authentication-after-sending-documents-via-api/" rel="noopener noreferrer"&gt;Mandating Signer Authentication After Sending Documents via API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/api-keys-vs-oauth-authentication/" rel="noopener noreferrer"&gt;API Key vs OAuth: The Ultimate Guide for Secure API Authentication&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;/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>authentication</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>How to Submit a Data Subject Request with BoldSign</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 15 Apr 2026 05:27:34 +0000</pubDate>
      <link>https://forem.com/boldsign/how-to-submit-a-data-subject-request-with-boldsign-50ag</link>
      <guid>https://forem.com/boldsign/how-to-submit-a-data-subject-request-with-boldsign-50ag</guid>
      <description>&lt;p&gt;For BoldSign users, we now have a streamlined process for submitting a data subject request for those individuals based in the European Economic Area (EEA) and UK.&lt;/p&gt;

&lt;p&gt;Rights provided under the General Data Protection Regulation (GDPR), UK Data Protection Act 2018, and UK GDPR allow individuals to have more control over their data. In this blog, we will outline how BoldSign users in the EEA and UK can exercise these rights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of data subject rights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Access:&lt;/strong&gt; You have the right to be informed about the personal data we process about you and to request access to it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Rectification:&lt;/strong&gt; You can ask us to amend or update your personal data if it’s inaccurate or incomplete.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Erasure:&lt;/strong&gt; You may request that we delete certain personal data we hold about you.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Restriction:&lt;/strong&gt; You can ask us to temporarily or permanently stop processing all or some of your personal data.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Object:&lt;/strong&gt; You have the right to object to our processing of your personal data at any time, especially if it relates to your specific situation or involves direct marketing.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data portability:&lt;/strong&gt; You can request a copy of your personal data in electronic format and have the right to transmit that data to another service provider.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to exercise rights with BoldSign
&lt;/h2&gt;

&lt;p&gt;As part of our commitment to data protection and transparency, BoldSign provides clear mechanisms for individuals to exercise their rights under GDPR. If you wish to access, correct, delete, restrict, or transfer your personal data, or object to its processing, you may submit a formal request through our designated channels. We are dedicated to responding promptly and in accordance with applicable legal requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Access the GDPR Request Form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you wish to exercise your GDPR rights, you can make a request by filling out our &lt;a href="https://boldsign.com/gdpr-request-form-secure-esignature?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;GDPR Request Form&lt;/a&gt;. Our legal team will respond in a timely manner to your request in accordance with GDPR requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; &lt;strong&gt;Fill out the required fields&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer Name:&lt;/strong&gt; Enter your full name to help BoldSign identify your account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer email address:&lt;/strong&gt; Provide the email address associated with your BoldSign account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details:&lt;/strong&gt; Describe your request clearly. Include specific information to ensure timely and accurate handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requested action&lt;/strong&gt;: Select the GDPR right you wish to exercise from the dropdown menu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Request corrections to your data.&lt;/li&gt;
&lt;li&gt;  Request erasure of your data.&lt;/li&gt;
&lt;li&gt;  Request a copy of your data.&lt;/li&gt;
&lt;li&gt;  Request a restriction on the processing your data.&lt;/li&gt;
&lt;li&gt;  Object to data processing.&lt;/li&gt;
&lt;li&gt;  Exercise your data portability rights.&lt;/li&gt;
&lt;li&gt;  Other: specify what you would like us to provide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Submit the form&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once completed, submit the form securely. BoldSign will acknowledge receipt and begin processing your request.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to expect after submission
&lt;/h2&gt;

&lt;p&gt;Upon submission of the form, our legal team will be notified. You should expect a timely receipt of submission. If any follow-up information is required, our team will reach out to you directly. We review each data subject access request carefully to ensure compliance and consideration.&lt;/p&gt;

&lt;p&gt;BoldSign also maintains a GDPR representative. Individuals in the UK and EU can additionally submit their data subject requests through the following means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EU Representative&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Bird &amp;amp; Bird GDPR Representative Services SRL for EU&lt;/li&gt;
&lt;li&gt;  Avenue Louise 235&lt;/li&gt;
&lt;li&gt;  1050 Bruxelles&lt;/li&gt;
&lt;li&gt;  Belgium &lt;/li&gt;
&lt;li&gt;  &lt;a href="mailto:EUrepresentative.syncfusion@twobirds.com"&gt;EUrepresentative.syncfusion@twobirds.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;UK Representative&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Bird &amp;amp; Bird GDPR Representative Services for UK&lt;/li&gt;
&lt;li&gt;  12 New Fetter Lane&lt;/li&gt;
&lt;li&gt;  London EC4A 1JP&lt;/li&gt;
&lt;li&gt;  United Kingdom&lt;/li&gt;
&lt;li&gt;  &lt;a href="mailto:UKrepresentative.syncfusion@twobirds.com"&gt;UKrepresentative.syncfusion@twobirds.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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://staging.boldsign.com/request-demo/" rel="noopener noreferrer"&gt;request a demo&lt;/a&gt; to see it in action.&lt;/p&gt;

</description>
      <category>esignature</category>
      <category>submission</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Free Facebook QR Code Generator for Profiles, Pages &amp; Posts</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 14 Apr 2026 06:15:03 +0000</pubDate>
      <link>https://forem.com/boldsign/free-facebook-qr-code-generator-for-profiles-pages-posts-50ng</link>
      <guid>https://forem.com/boldsign/free-facebook-qr-code-generator-for-profiles-pages-posts-50ng</guid>
      <description>&lt;p&gt;BoldSign is thrilled to introduce our free &lt;a href="https://boldsign.com/facebook-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Facebook QR Code Generator&lt;/a&gt; a fast, intuitive, and secure way to turn any Facebook profile, Page, post, or event link into a scannable QR code. Whether you’re a creator growing your audience, a business promoting your Page, or an event host driving RSVPs, this tool is built to simplify how people find you on Facebook at no cost and without complexity.&lt;/p&gt;

&lt;p&gt;With no sign‑up required and unlimited code generation, the BoldSign Facebook QR Code Generator helps you create and customize QR codes online in seconds. Enjoy instant, client‑side processing that keeps your data private, and share your Facebook presence effortlessly across print and digital on any device, securely and with ease.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features of the BoldSign Facebook QR Code Generator
&lt;/h2&gt;

&lt;p&gt;Our Facebook QR code generator is designed with simplicity, speed, and security at its core. Here’s what makes it exceptional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Client&lt;/strong&gt;&lt;strong&gt;‑&lt;/strong&gt;&lt;strong&gt;side security&lt;/strong&gt;: All processing happens directly in your browser. Your URL and QR code data never leave your device, ensuring complete privacy.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero sign&lt;/strong&gt;&lt;strong&gt;‑&lt;/strong&gt;&lt;strong&gt;ups&lt;/strong&gt;: Create your Facebook QR code instantly, no account creation or registration needed.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Clean, intuitive interface&lt;/strong&gt;: Just paste your Facebook profile, Page, or post link, customize if needed, and generate your QR code with one click.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cross‑platform compatibility&lt;/strong&gt;: Works smoothly across Windows, macOS, Linux, iOS, and Android, no downloads, no installations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Customization options&lt;/strong&gt;: Adjust colors, patterns to match your brand or personal style and make your QR code stand out.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unlimited usage&lt;/strong&gt;: Generate as many Facebook QR codes as you want with no limits on scans, downloads, or usage.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;High&lt;/strong&gt;&lt;strong&gt;‑&lt;/strong&gt;&lt;strong&gt;quality downloads&lt;/strong&gt;: Download crisp, watermark‑free QR codes suitable for print materials, posters, packaging, or online sharing.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Instant preview&lt;/strong&gt;: See your QR code update in real time as you customize it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why use the free BoldSign Facebook QR Code Generator
&lt;/h2&gt;

&lt;p&gt;Choosing our Facebook QR code generator offers a range of valuable benefits that make it the ideal solution for individuals, creators, and businesses looking to increase their visibility on Facebook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Fast sharing:&lt;/strong&gt; Skip long links-let people reach your Facebook profile or page instantly just by scanning.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Boost engagement:&lt;/strong&gt; Perfect for businesses, creators, and brands looking to drive likes, follows, event responses, or page visits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Enhanced accessibility:&lt;/strong&gt; Great for printing materials like flyers, menus, business cards, posters, and product packaging.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Time-saving and professional:&lt;/strong&gt; Generate polished, reliable QR codes without extra tools or paid software.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Secure by design:&lt;/strong&gt; Your data stays local because processing is fully client-side, ensuring privacy for both personal and business profiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create a Facebook QR code using BoldSign
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Paste your Facebook link:&lt;/strong&gt; Enter the link to your profile, Page, event, or post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Customize your QR code (optional):&lt;/strong&gt; Choose your preferred pattern color, background color, and size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Download instantly:&lt;/strong&gt; Click Generate and download your QR code in seconds-ready to use anywhere.&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%2Fllstktk76qlrwx9vfpgi.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%2Fllstktk76qlrwx9vfpgi.png" alt="" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Our free &lt;a href="https://boldsign.com/facebook-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Facebook QR Code Generator&lt;/a&gt; is a powerful solution for anyone looking to share their Facebook presence quickly, securely, and without any cost. Designed for creators, professionals, and businesses alike, it offers a smooth, intuitive experience that makes connecting with your audience effortless. With client‑side processing, cross‑platform compatibility, and unlimited, watermark‑free QR code creation, you get a reliable tool that keeps your data private while delivering professional‑grade results.&lt;/p&gt;

&lt;p&gt;Whether you’re growing a Facebook Page, promoting an event, sharing a profile, or driving engagement for a post, this tool ensures your audience can reach you instantly with a simple scan. Start generating your free Facebook QR codes today and simplify how people discover and engage with you online. If you’re ready to enhance your workflow even further, explore more tools in 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&lt;/a&gt; ecosystem designed to support secure, seamless digital interactions.&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-twitter-qr-code-online/" rel="noopener noreferrer"&gt;Introducing BoldSign’s Twitter QR Code Generator&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>qrcode</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Digital Patient Intake Workflow for Clinics: Faster, Simpler Check-Ins</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 13 Apr 2026 06:34:20 +0000</pubDate>
      <link>https://forem.com/boldsign/digital-patient-intake-workflow-for-clinics-faster-simpler-check-ins-497l</link>
      <guid>https://forem.com/boldsign/digital-patient-intake-workflow-for-clinics-faster-simpler-check-ins-497l</guid>
      <description>&lt;p&gt;Busy mornings at clinics often look the same, patients lining up, staff flipping through forms, someone asking for a pen, and someone else trying to read handwriting that looks like a treasure map. But the real problem? Everyone is waiting for paperwork that shouldn’t take this long.&lt;br&gt;&lt;br&gt;
What clinics need is a smooth, predictable process where patients fill and sign everything on their phone , even before stepping inside.&lt;br&gt;&lt;br&gt;
Tools like BoldSign simply help collect the signatures and consents in this workflow, without complicating the process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why digital patient intake matters now
&lt;/h2&gt;

&lt;p&gt;Clinic front desks are often the most overloaded area. Paper intake multiplies the stress:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  More waiting&lt;/li&gt;
&lt;li&gt;  More missing info&lt;/li&gt;
&lt;li&gt;  More data entry&lt;/li&gt;
&lt;li&gt;  More risk of lost documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Digital intake flips this around by letting patients:&lt;/p&gt;

&lt;p&gt;✔ Fill forms anytime&lt;br&gt;&lt;br&gt;
✔ Sign consents securely&lt;br&gt;&lt;br&gt;
✔ Upload ID/insurance photos&lt;br&gt;&lt;br&gt;
✔ Reduce lobby congestion&lt;/p&gt;

&lt;p&gt;Front desk staff finally focus on helping patients, not chasing paperwork.&lt;br&gt;&lt;br&gt;
Key Takeaway: Every minute saved at intake reduces delays throughout the rest of the day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple real-life scenario
&lt;/h2&gt;

&lt;p&gt;A pediatric clinic started sending parents a link the evening before appointments. Parents complete the child’s history, medication list, and sign the consent on their phone while preparing school bags. When they arrive the next morning, check-in takes under 60 seconds. The doctor has cleaner data, the nurses don’t retype anything, and the clinic runs smoother.&lt;br&gt;&lt;br&gt;
In simple words, “Parent completing a mobile-friendly digital patient intake form on a smartphone before a clinic visit.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Manual workaround
&lt;/h2&gt;

&lt;p&gt;Many clinics think they’re “digital” by emailing a PDF to patients. But in reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Patient needs to print it&lt;/li&gt;
&lt;li&gt;  Fill it manually&lt;/li&gt;
&lt;li&gt;  Scan or photograph each page&lt;/li&gt;
&lt;li&gt;  Send low-quality images back&lt;/li&gt;
&lt;li&gt;  Clinic staff re-type everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t save time; it simply moves the same problems to email.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Note:&lt;/strong&gt; If any step requires scanning or printing, it’s not truly digital.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better, simpler approach: A patient-first workflow
&lt;/h2&gt;

&lt;p&gt;Here’s a clean, clinic-friendly workflow almost any practice can adopt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Step 1: Send a pre-visit intake link: 24–48 hours before the appointment, send the intake form via email or SMS.&lt;/li&gt;
&lt;li&gt;  Step 2: Patient fills the form on mobile: Demographics, history, symptoms, all with required fields to prevent missing info.&lt;/li&gt;
&lt;li&gt;  Step 3: Collect digital signatures: General consent, telehealth consent, privacy notices, imaging consent, etc. Tools like BoldSign handle this part smoothly.&lt;/li&gt;
&lt;li&gt;  Step 4: Collect uploads: Patients snap and upload insurance card, ID, Previous reports (optional).&lt;/li&gt;
&lt;li&gt;  Step 5: Automated checks: The system prevents submission if something essential is missing.&lt;/li&gt;
&lt;li&gt;  Step 6: Front desk verifies quickly: No more data entry. No more scrambling. Just a quick confirmation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How BoldSign supports digital intake
&lt;/h2&gt;

&lt;p&gt;BoldSign fits naturally into the intake workflow by handling the signature part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reusable consent templates&lt;/li&gt;
&lt;li&gt;  Place required signature/date fields&lt;/li&gt;
&lt;li&gt;  Patient signs on mobile&lt;/li&gt;
&lt;li&gt;  Clinic gets a final PDF and audit trail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use no-code templates or add light automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using BoldSign templates (no coding needed)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Upload your consent form to &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&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Drag signature/date fields onto the form.&lt;/li&gt;
&lt;li&gt;  Save as a &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;Template&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  For every patient, send only the name and email, done.&lt;/li&gt;
&lt;li&gt;  Patient signs on mobile; you receive the finished document securely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Callout: You don’t need to automate on day one. Start with templates. Add automation only when your workflow is stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clinic use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Family Medicine: Digital intake helps collect basic health history and consent forms ahead of time, making check-ins faster and smoother.&lt;/li&gt;
&lt;li&gt;  Eye Clinics: Patients can review imaging and lens‑fitting consents before arriving, reducing delays during busy appointment hours.&lt;/li&gt;
&lt;li&gt;  Dermatology: Photo consent and treatment agreements are completed early, so dermatologists can focus directly on the patient’s condition.&lt;/li&gt;
&lt;li&gt;  Pediatrics: Parents can complete guardian authorization and vaccination consent from home, making the visit less stressful for everyone.&lt;/li&gt;
&lt;li&gt;  Telehealth: Patients sign video‑visit consent and upload ID before the call, ensuring a compliant and hassle‑free virtual appointment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best practices for smooth digital intake
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Keep the form short, ask only what’s necessary.&lt;/li&gt;
&lt;li&gt;  Make the form mobile-first, larger fields, easy taps.&lt;/li&gt;
&lt;li&gt;  Use required fields to prevent missing details.&lt;/li&gt;
&lt;li&gt;  Use templates for all recurring consent types.&lt;/li&gt;
&lt;li&gt;  Send reminders 24 hours before the appointment.&lt;/li&gt;
&lt;li&gt;  Train staff on how to verify digital submissions quickly.&lt;/li&gt;
&lt;li&gt;  Review wording yearly for clarity and legal compliance.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Digital patient intake isn’t complicated, it simply replaces slow paperwork with a smoother, faster check in process. Clinics get accurate information, patients skip the clipboard wait, and everyone moves through the day with less stress. To get started, set up a BoldSign template for your most used consent form, it’s a small change that makes a big difference.&lt;/p&gt;

&lt;p&gt;Start your free &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 trial&lt;/a&gt; today&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;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/ai-for-healthcare-claude-openai/" rel="noopener noreferrer"&gt;How Claude and OpenAI Are Redefining AI for Healthcare and eSignature Workflows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-collaborative-fields-api/" rel="noopener noreferrer"&gt;BoldSign Collaborative Fields for Accurate Multi‑Signer API Workflows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/esignature-in-dotnet-sdk-free-live-webinar/" rel="noopener noreferrer"&gt;End-to-End eSignature Workflows in .NET with BoldSign SDK: Webinar&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>workflow</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>BoldSign Wins 10 G2 Winter 2026 Badges in eSignature</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Fri, 10 Apr 2026 06:40:38 +0000</pubDate>
      <link>https://forem.com/boldsign/boldsign-wins-10-g2-winter-2026-badges-in-esignature-5381</link>
      <guid>https://forem.com/boldsign/boldsign-wins-10-g2-winter-2026-badges-in-esignature-5381</guid>
      <description>&lt;p&gt;We’re thrilled to share that BoldSign has earned 10 badges in &lt;a href="https://www.g2.com/categories/e-signature" rel="noopener noreferrer"&gt;G2’s&lt;/a&gt; Winter 2026 reports for the e-signature category, including multiple Leader and regional recognitions across segments like Small Business and Mid-Market. Being recognized in these grids reinforces what we aim for every release: an e-signature experience that’s powerful, simple to use, and accessible for teams at every stage of growth.&lt;/p&gt;

&lt;p&gt;This isn’t BoldSign’s first time being recognized by G2, but we never take it for granted. Every badge reflects feedback from real users, and it pushes us to keep improving our product month after month.&lt;/p&gt;

&lt;h2&gt;
  
  
  G2 awards overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.g2.com/" rel="noopener noreferrer"&gt;G2&lt;/a&gt; is a leading software review and comparison platform that helps organizations evaluate solutions using verified customer feedback and market signals. It is widely used by buyers to research, compare, and shortlist software with greater confidence.&lt;/p&gt;

&lt;p&gt;G2’s quarterly awards recognize products that demonstrate strong customer satisfaction and market presence across key criteria such as usability, support, and overall performance. Receiving a G2 award reflects consistent customer trust and provides a credible reference point for teams making software decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  BoldSign earns 10 G2 winter 2026 badges
&lt;/h2&gt;

&lt;p&gt;In the Winter 2026 report, BoldSign received recognition across multiple subcategories in the eSignature space.&lt;/p&gt;

&lt;p&gt;Badges received:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Regional Leader – Canada&lt;/li&gt;
&lt;li&gt;  Regional Leader – EMEA&lt;/li&gt;
&lt;li&gt;  Leader&lt;/li&gt;
&lt;li&gt;  Leader – Small Business&lt;/li&gt;
&lt;li&gt;  Regional Leader – Small Business (Canada)&lt;/li&gt;
&lt;li&gt;  Regional Leader – Small Business (EMEA)&lt;/li&gt;
&lt;li&gt;  Regional Leader – Small Business (Europe)&lt;/li&gt;
&lt;li&gt;  Regional Leader – Small Business (Asia Pacific)&lt;/li&gt;
&lt;li&gt;  Momentum Leader&lt;/li&gt;
&lt;li&gt;  Leader – Mid‑Market&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These recognitions reflect strong customer satis&lt;/p&gt;

&lt;h2&gt;
  
  
  Why G2 recognition matters
&lt;/h2&gt;

&lt;p&gt;G2 recognition is based on real user reviews, which makes it meaningful for buyers comparing eSignature tools.&lt;/p&gt;

&lt;p&gt;For teams evaluating eSignature platforms, these badges provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Trusted customer validation.&lt;/li&gt;
&lt;li&gt;  Proof of product usability.&lt;/li&gt;
&lt;li&gt;  Confidence in choosing the right solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Earning multiple badges signals that BoldSign consistently delivers a strong experience for its users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why businesses choose BoldSign
&lt;/h2&gt;

&lt;p&gt;Organizations use BoldSign to simplify document signing and accelerate approvals.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Fast document-signing workflows.&lt;/li&gt;
&lt;li&gt;  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;template&lt;/a&gt;s for common agreements.&lt;/li&gt;
&lt;li&gt;  &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 sending&lt;/a&gt; for high‑volume workflows.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/in-person-signing?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;In‑person signing&lt;/a&gt; support.&lt;/li&gt;
&lt;li&gt;  Multiple &lt;a href="https://support.boldsign.com/kb/article/151/add-authentication-after-sending-document" rel="noopener noreferrer"&gt;signer authentication&lt;/a&gt; options.&lt;/li&gt;
&lt;li&gt;  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; for regulatory compliance.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/esignature-mobile-app?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Mobile‑optimized&lt;/a&gt; signer experience.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/integrations?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Integrations&lt;/a&gt; with popular business tools.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://support.boldsign.com/kb/article/14637/conditional-logic-how-it-works" rel="noopener noreferrer"&gt;Conditional fields&lt;/a&gt; with smart logic.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/esignature-ai-form-field-detection?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;AI-powered&lt;/a&gt; document features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features help teams reduce paperwork delays and simplified document processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you to our users
&lt;/h2&gt;

&lt;p&gt;This recognition wouldn’t be possible without the valuable feedback shared by our customers.&lt;/p&gt;

&lt;p&gt;Your reviews help us continue improving BoldSign to delivering a better document-signing experience.&lt;/p&gt;

&lt;p&gt;If you are not yet a BoldSign subscriber, please check out our &lt;a href="https://www.g2.com/products/boldsign/reviews" rel="noopener noreferrer"&gt;reviews&lt;/a&gt; to see why our customers believe our e-signature platform is a leader in the market. Take a look at our &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;features&lt;/a&gt; and &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; 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 live demo&lt;/a&gt; to see what BoldSign can do for your company.&lt;/p&gt;

&lt;p&gt;Leave or read a review &lt;a href="https://www.g2.com/products/boldsign/reviews" rel="noopener noreferrer"&gt;BoldSign Reviews 2025: Details, Pricing, &amp;amp; Features | G2&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/boldsign-secures-crozdesk-quality-choice-happiest-users-award" rel="noopener noreferrer"&gt;BoldSign Wins Crozdesk’s Quality Choice Award and Happiest Users Award!&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-wins-postman-developers-choice-award/" rel="noopener noreferrer"&gt;BoldSign Honored with Postman Developer’s Choice Award&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-wins-no1-dev-choice-postcon-2025/" rel="noopener noreferrer"&gt;BoldSign Takes Home Postman Developer’s Choice Award 2025&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>g2awards</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Webinar Show Notes: Find Contracts in Seconds with BoldSign AI Search</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Thu, 09 Apr 2026 05:25:17 +0000</pubDate>
      <link>https://forem.com/boldsign/webinar-show-notes-find-contracts-in-seconds-with-boldsign-ai-search-2fmb</link>
      <guid>https://forem.com/boldsign/webinar-show-notes-find-contracts-in-seconds-with-boldsign-ai-search-2fmb</guid>
      <description>&lt;p&gt;In this webinar, Gayathri Annamalai, Software Developer at BoldSign, demonstrates how BoldSign AI Search helps you find what you need in seconds using conversational search. Instead of relying on multiple manual filters, you can type a request that includes details such as status, signer, owner, or date, and AI Search returns relevant results quickly.&lt;/p&gt;

&lt;p&gt;If you missed the webinar or would like to watch it again, the recording is available on our &lt;a href="https://www.youtube.com/watch?v=0n1P43-pytM?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt; and is embedded.&lt;/p&gt;

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

&lt;p&gt;The webinar opened with a look at common challenges users face when searching with traditional filter-based methods, especially when multiple conditions are needed or when users do not remember where a document is stored.&lt;/p&gt;

&lt;p&gt;Gayathri then introduced BoldSign AI Search and shared practical examples showing how it interprets intent, combines conditions automatically, and returns accurate results across your BoldSign account. The session also covered how you can refine or broaden results by adjusting your query without resetting filters and starting over.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Search using &lt;strong&gt;simple, conversational queries&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Combine conditions&lt;/strong&gt; such as &lt;strong&gt;status, date, signer, owner, and type&lt;/strong&gt; in a single search&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Quickly locate&lt;/strong&gt; &lt;strong&gt;pending, viewed, stalled, or recently updated&lt;/strong&gt; items&lt;/li&gt;
&lt;li&gt;  Search &lt;strong&gt;both documents and templates&lt;/strong&gt; from one place&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Refine results&lt;/strong&gt; naturally by &lt;strong&gt;adding or removing words&lt;/strong&gt; in your query&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Get more accurate results&lt;/strong&gt; by including clear details such as &lt;strong&gt;status or signer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  Use conversational search to find documents faster&lt;/li&gt;
&lt;li&gt;  Combine multiple conditions in a single query&lt;/li&gt;
&lt;li&gt;  Quickly identify items by status, date, signer, or owner&lt;/li&gt;
&lt;li&gt;  Refine results without manual filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Learn more about &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&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Learn more about &lt;a href="/https://boldsign.com/electronic-signature-features/ai-search?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs"&gt;AI Search&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Contact &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support&lt;/a&gt;
&lt;/li&gt;
&lt;li&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;Get started for free&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/ai-search-for-contracts-free-live-webinar/" rel="noopener noreferrer"&gt;Join Our Webinar: Find Any Contract in Seconds with BoldSign’s AI Search&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/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;/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>aisearch</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
    <item>
      <title>Convert PDF to PNG Easily with Our Free Online Converter</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 08 Apr 2026 09:01:40 +0000</pubDate>
      <link>https://forem.com/boldsign/convert-pdf-to-png-easily-with-our-free-online-converter-28e1</link>
      <guid>https://forem.com/boldsign/convert-pdf-to-png-easily-with-our-free-online-converter-28e1</guid>
      <description>&lt;p&gt;We are excited to introduce another powerful addition to the BoldSign free tools collection, the PDF to PNG converter. It is fast, secure, and designed to turn PDF pages into crisp PNG images in just seconds.&lt;/p&gt;

&lt;p&gt;Use this free online tool to convert PDF pages into high quality PNG images for previews, documentation, blog posts, social media, presentations, thumbnails, and UI mockups. No installations, no signups, and no watermarks.&lt;/p&gt;

&lt;p&gt;To help you begin right away, here is a quick step by step guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use this tool
&lt;/h2&gt;

&lt;p&gt;It’s super easy to use. Just follow these four simple steps to convert your PDFs into PNG images:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Go to the online converter&lt;/strong&gt;: Open the BoldSign PDF to PNG converter in your web browser.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Upload your PDF&lt;/strong&gt;: Drag and drop your PDF or click to select it from your device.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Customize PNG quality&lt;/strong&gt;: Choose your preferred DPI to set the exact clarity and image sharpness you want.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Download your images&lt;/strong&gt;: Click Download as ZIP to save all PNG pages to your device.&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%2Fi14e91a3ucs9b53htedm.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%2Fi14e91a3ucs9b53htedm.png" alt="" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do with this tool
&lt;/h2&gt;

&lt;p&gt;BoldSign’s PDF to PNG converter includes simple but powerful customization options to give you full control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;PNG image quality:&lt;/strong&gt; Pick the DPI you need for crisp, high resolution PNG output that is ideal for graphics, reports, thumbnails, and documentation.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Multi page conversion&lt;/strong&gt;: Convert every page automatically. Great for reports, slide decks, illustrated guides, and scanned documents.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Download convenience:&lt;/strong&gt; Save everything as a single ZIP for quick sharing and storage.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cross platform compatibility:&lt;/strong&gt; Use PNGs anywhere images are required, including sites that do not accept PDFs and apps that only allow image uploads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why you should use this tool
&lt;/h2&gt;

&lt;p&gt;Our PDF to PNG converter is built for everyone, whether you’re a student, freelancer, designer, marketer, or corporate team member. Here’s why it’s the best choice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;100% free for everyone:&lt;/strong&gt; Convert unlimited PDFs with no fees, no subscriptions, and no hidden charges.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No sign up and no installation:&lt;/strong&gt; Open the tool in your browser and start converting instantly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Safe and secure:&lt;/strong&gt; All processing happens in your browser. Your files never leave your device and are never uploaded or stored on servers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No watermarks or limits:&lt;/strong&gt; Download clean PNG images and convert as many PDFs as you want.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Works on any device:&lt;/strong&gt; Use it on Windows, Mac, Linux, iOS, or Android with no software required.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Fast and easy:&lt;/strong&gt; Drag and drop, set DPI, and download. The interface is built for speed and simplicity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Part of the BoldSign free tools collection
&lt;/h2&gt;

&lt;p&gt;This converter is part of a growing set of free, browser-based utilities that simplify document workflows. No downloads and no signups required.&lt;/p&gt;

&lt;p&gt;Explore more in our  &lt;a href="https://boldsign.com/free-tools?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;free tools collection&lt;/a&gt; and enhance your workflow with BoldSign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to try it out?
&lt;/h2&gt;

&lt;p&gt;Use BoldSign’s Free &lt;a href="https://boldsign.com/pdf-to-png-converter?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;PDF to PNG converter&lt;/a&gt; now. Convert your PDF pages into pixel perfect PNG images quickly and securely on any device.&lt;/p&gt;

&lt;p&gt;Need to sign PDFs instead? Use &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 e-signature&lt;/a&gt; to add secure, legally binding signatures with a complete audit trail.&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;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/convert-pdf-to-images-online-free/" rel="noopener noreferrer"&gt;Introducing BoldSign’s free PDF to Image converter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/free-pdf-organize-tool-boldsign/" rel="noopener noreferrer"&gt;Introducing BoldSign’s Free Organize PDF Tool&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/why-browser-based-pdf-tools-are-safer/" rel="noopener noreferrer"&gt;Why are Browser-Based PDF Tools Safer for Everyone?&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>onlineconverter</category>
      <category>pdftopng</category>
      <category>documents</category>
    </item>
  </channel>
</rss>
