<?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>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>
    <item>
      <title>Controllers vs Minimal APIs in .NET 8: What to Choose and Why</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 06 Apr 2026 05:46:37 +0000</pubDate>
      <link>https://forem.com/boldsign/controllers-vs-minimal-apis-in-net-8-what-to-choose-and-why-143c</link>
      <guid>https://forem.com/boldsign/controllers-vs-minimal-apis-in-net-8-what-to-choose-and-why-143c</guid>
      <description>&lt;p&gt;Controller-based APIs (ASP.NET Core Web API with [ApiController]) are the strongest default for large, long-lived APIs because they ship with conventions, discoverability, and mature MVC extension points for enforcing cross-cutting policies consistently. &lt;/p&gt;

&lt;p&gt;Minimal APIs are a great fit for smaller or focused services (microservices/internal APIs) when you want an endpoint-first model and you’re willing to enforce structure intentionally with route groups, conventions, endpoint filters, and feature modules. &lt;/p&gt;

&lt;p&gt;In most real workloads, this choice impacts maintainability and team consistency more than raw performance (see Microsoft’s controller-based Web API guidance at “Create web APIs with ASP.NET Core” on &lt;a href="https://learn.microsoft.com/aspnet/core/web-api/?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt; and &lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Minimal APIs&lt;/a&gt;). &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the difference between controllers and Minimal APIs in .NET 8?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What are controllers in .NET 8 Web API terms?
&lt;/h3&gt;

&lt;p&gt;Controllers map routes to controller action methods inside the MVC pipeline: controller discovery, model binding conventions, MVC filters, and action results, described in &lt;a href="https://learn.microsoft.com/aspnet/core/web-api/?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Microsoft Learn’s Web API documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are Minimal APIs in .NET 8 terms?
&lt;/h3&gt;

&lt;p&gt;Minimal APIs map routes directly to handlers via MapGet/MapPost/… using the same ASP.NET Core fundamentals such as hosting, routing, DI, auth, middleware, just composed explicitly per endpoint or per route group (&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;). &lt;/p&gt;

&lt;h2&gt;
  
  
  When should you choose controllers in .NET 8?
&lt;/h2&gt;

&lt;p&gt;Pick controllers when most of these are true: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You expect many endpoints across multiple domains/resources. &lt;/li&gt;
&lt;li&gt;  You want conventions by default (routing patterns, binding behavior, action results). &lt;/li&gt;
&lt;li&gt;  You rely on MVC patterns like filters and want onboarding/discoverability to be easy (&lt;a href="https://learn.microsoft.com/aspnet/core/mvc/controllers/filters?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;MVC filters reference&lt;/a&gt;). &lt;/li&gt;
&lt;li&gt;  You need strong governance (consistent responses, versioning approach, cross-cutting policies) with less custom glue. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If your API will have lots of endpoints and lots of contributors, controllers reduce the amount of “team-invented framework.”&lt;/p&gt;

&lt;h2&gt;
  
  
  When should you choose Minimal APIs in .NET 8?
&lt;/h2&gt;

&lt;p&gt;Pick Minimal APIs when most of these are true: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Your API is a focused service (microservice/edge/internal) with a smaller surface area. &lt;/li&gt;
&lt;li&gt;  You prefer configuring behavior fluently per endpoint or per route group (auth, metadata, conventions). &lt;/li&gt;
&lt;li&gt;  You’ll keep handlers thin and enforce boundaries using feature modules + route groups. &lt;/li&gt;
&lt;li&gt;  You want endpoint-specific cross-cutting behavior via endpoint filters (&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis/min-api-filters?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;endpoint filters reference&lt;/a&gt;). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you choose Minimal APIs, commit to structure (route groups + modules). “Minimal” should mean less ceremony, not less discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  What pipeline mental model helps you compare them quickly?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How does a controller request flow?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Controllers:&lt;/strong&gt; Routing → controller selection → MVC filters → action → result &lt;br&gt;&lt;br&gt;
(&lt;a href="https://learn.microsoft.com/aspnet/core/mvc/controllers/filters?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;MVC filters are a built-in extension point&lt;/a&gt;) &lt;/p&gt;
&lt;h3&gt;
  
  
  How does a Minimal API request flow?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Minimal APIs:&lt;/strong&gt; Routing → handler → (optional) endpoint filters → result &lt;br&gt;&lt;br&gt;
(&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis/min-api-filters?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Endpoint filters&lt;/a&gt;) &lt;/p&gt;
&lt;h2&gt;
  
  
  How do you implement the same endpoint in both styles?
&lt;/h2&gt;

&lt;p&gt;Below are equivalent “GET widget by id” examples&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task: Create the controller endpoint&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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Mvc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/widgets"&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;WidgetsController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&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;IWidgetService&lt;/span&gt; &lt;span class="n"&gt;_service&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;WidgetsController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IWidgetService&lt;/span&gt; &lt;span class="n"&gt;service&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;_service&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id:guid}"&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="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Guid&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;{&lt;/span&gt; 
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;widget&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;widget&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="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="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;widget&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;Task: Create the Minimal API endpoint&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;app&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;"/api/min/widgets/{id:guid}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; 
        &lt;span class="n"&gt;Guid&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;IWidgetService&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;widget&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;widget&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;Results&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;Results&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;widget&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; The main architectural similarity: both should be thin HTTP layers calling services. &lt;/p&gt;

&lt;h2&gt;
  
  
  How do DI and testability compare between controllers and Minimal APIs?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Outcome: Both use the same DI container, so keep handlers/actions thin either way&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;ASP.NET Core’s DI fundamentals apply equally to controllers and Minimal APIs (&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;fundamentals&lt;/a&gt;). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Controllers&lt;/strong&gt; commonly use constructor injection; this encourages thin controllers by default.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Minimal APIs&lt;/strong&gt; commonly inject services via handler parameters; handlers should still be thin, and push logic into services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you can unit-test your business logic without HTTP, you’re doing it right.&lt;/p&gt;

&lt;h2&gt;
  
  
  How should you handle validation and consistent errors in each style?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do controllers typically do validation?
&lt;/h3&gt;

&lt;p&gt;Controllers commonly rely on model binding + validation conventions (&lt;a href="https://learn.microsoft.com/aspnet/core/mvc/models/model-binding?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;model binding&lt;/a&gt;). Many teams also standardize error responses using Problem Details (&lt;a href="https://learn.microsoft.com/aspnet/core/web-api/handle-errors?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;Problem Details&lt;/a&gt;). &lt;/p&gt;

&lt;h3&gt;
  
  
  How do Minimal APIs typically enforce validation and consistent errors? 
&lt;/h3&gt;

&lt;p&gt;Minimal APIs can use the same validation approaches, but endpoint filters are especially useful to enforce consistent validation + error policies across a route group (&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis/min-api-filters?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;endpoint filters&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task: Return ProblemDetails from a Minimal API validation filter (consistent error shape)&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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Http&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/min/widgets"&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="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateWidgetRequest&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IWidgetService&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="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;req&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;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;Results&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/min/widgets/..."&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="p"&gt;})&lt;/span&gt; 
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddEndpointFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&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;next&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;req&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="nf"&gt;GetArgument&lt;/span&gt;&lt;span class="p"&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;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;req&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="p"&gt;{&lt;/span&gt; 
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Problem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
                &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Validation failed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="n"&gt;detail&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="n"&gt;statusCode&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;Status400BadRequest&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="s"&gt;"https://www.rfc-editor.org/rfc/rfc9110"&lt;/span&gt; 
            &lt;span class="p"&gt;);&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If consumers get the same error format from every endpoint, you’ve reduced client bugs and support costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Built-in Swagger/OpenAPI setup is required for both styles?
&lt;/h2&gt;

&lt;p&gt;Both Controllers and Minimal APIs support OpenAPI/Swagger generation in .NET 8.&lt;/p&gt;

&lt;p&gt;Add this to Program.cs:&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;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;AddEndpointsApiExplorer&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;AddSwaggerGen&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="k"&gt;if&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="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsDevelopment&lt;/span&gt;&lt;span class="p"&gt;())&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;UseSwagger&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;UseSwaggerUI&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;ul&gt;
&lt;li&gt;  AddEndpointsApiExplorer() enables endpoint discovery (especially important for Minimal APIs).&lt;/li&gt;
&lt;li&gt;  AddSwaggerGen() generates the OpenAPI specification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Controllers automatically expose metadata via MVC conventions. &lt;br&gt;&lt;br&gt;
Minimal APIs expose metadata via endpoint mapping and attributes or fluent configuration. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; OpenAPI support is equal in capability. Controllers rely more on conventions; Minimal APIs rely more on explicit metadata.&lt;/p&gt;
&lt;h2&gt;
  
  
  How does authorization differ between controllers and Minimal APIs?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Outcome: Same underlying authorization system; different syntax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ASP.NET Core authorization works the same underneath (&lt;a href="https://learn.microsoft.com/aspnet/core/security/authorization/introduction?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;authorization overview&lt;/a&gt;). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Controllers: use [Authorize] attributes.&lt;/li&gt;
&lt;li&gt;  Minimal APIs: use .RequireAuthorization() at endpoint or route-group level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; Prefer policy at the highest sensible level (controller or route group), then override only where needed.&lt;/p&gt;
&lt;h2&gt;
  
  
  What does [ApiController] automatically do that Minimal APIs do not?
&lt;/h2&gt;

&lt;p&gt;When you use controllers with [ApiController], ASP.NET Core enables several opinionated behaviors automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Automatic 400 Bad Request responses when model validation fails&lt;/li&gt;
&lt;li&gt;  Automatic ProblemDetails formatting for validation errors&lt;/li&gt;
&lt;li&gt;  Inferred [FromBody], [FromRoute], and [FromQuery] binding sources&lt;/li&gt;
&lt;li&gt;  Parameter binding source inference&lt;/li&gt;
&lt;li&gt;  Consistent error response behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/widgets"&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;WidgetsController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpPost&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;IActionResult&lt;/span&gt; &lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateWidgetRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="c1"&gt;// If ModelState is invalid, &lt;/span&gt;
            &lt;span class="c1"&gt;// framework automatically returns 400 with ProblemDetails &lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Ok&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;Minimal APIs do not automatically enforce model validation unless you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Manually validate&lt;/li&gt;
&lt;li&gt;  Use endpoint filters&lt;/li&gt;
&lt;li&gt;  Use validation libraries&lt;/li&gt;
&lt;li&gt;  Add custom middleware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Checkpoin&lt;/strong&gt;t: Controllers provide governance by default. Minimal APIs require explicit enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should performance influence your choice between controllers and Minimal APIs?
&lt;/h2&gt;

&lt;p&gt;Minimal APIs may reduce some framework overhead, but in many real APIs the dominant cost is I/O (DB/network), authentication, and serialization, so choose based on maintainability and measure bottlenecks before migrating. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you haven’t measured p50/p95 latency and DB round-trips, you don’t yet know whether “API style” matters for your performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you keep Minimal APIs maintainable as the codebase grows?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Task: Use a route-group + feature-module pattern (avoid Program.cs sprawl)&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;A common maintainable pattern is: Program.cs wires things; feature modules map endpoints (&lt;a href="https://learn.microsoft.com/aspnet/core/fundamentals/?view=aspnetcore-8.0" rel="noopener noreferrer"&gt;ASP.NET Core fundamentals&lt;/a&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="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;WidgetEndpoints&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;MapWidgetEndpoints&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/min/widgets"&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="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:guid}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GetById&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="n"&gt;Create&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="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&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;GetById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Guid&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;IWidgetService&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="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;is&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;Results&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;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Results&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="c1"&gt;// Small credibility nit: show a REST-ish Location header pattern &lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&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;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateWidgetRequest&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IWidgetService&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;{&lt;/span&gt; 
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;id&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;req&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;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;Results&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/min/widgets/&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="k"&gt;null&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; If you can find all “Widget” endpoints in one place without scrolling Program.cs, your Minimal API organization is working.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can you make Minimal APIs Production-Grade in large codebases?
&lt;/h2&gt;

&lt;p&gt;If you choose Minimal APIs, commit to structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use route groups per feature&lt;/li&gt;
&lt;li&gt;  Move mappings into feature modules&lt;/li&gt;
&lt;li&gt;  Apply authorization at group level&lt;/li&gt;
&lt;li&gt;  Use endpoint filters consistently&lt;/li&gt;
&lt;li&gt;  Centralize error handling&lt;/li&gt;
&lt;li&gt;  Standardize response types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example pattern:&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="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;WidgetEndpoints&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;MapWidgetEndpoints&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/min/widgets"&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="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:guid}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GetById&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="n"&gt;Create&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;“Minimal” should mean less ceremony, not less discipline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you can locate all widget endpoints without searching Program.cs, your structure is healthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What practical decision matrix can help you choose quickly?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Recommended Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Large enterprise API&lt;/td&gt;
&lt;td&gt;Controllers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Many teams contributing&lt;/td&gt;
&lt;td&gt;Controllers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heavy use of filters&lt;/td&gt;
&lt;td&gt;Controllers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strict governance requirements&lt;/td&gt;
&lt;td&gt;Controllers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small microservice&lt;/td&gt;
&lt;td&gt;Minimal APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Focused internal API&lt;/td&gt;
&lt;td&gt;Minimal APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explicit per-endpoint composition preferred&lt;/td&gt;
&lt;td&gt;Minimal APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Very lean edge service&lt;/td&gt;
&lt;td&gt;Minimal APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is not about capability, both are fully capable.&lt;/p&gt;

&lt;p&gt;It’s about default structure vs explicit composition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Should you choose Controllers or Minimal APIs in .NET 8?
&lt;/h2&gt;

&lt;p&gt;Controllers and Minimal APIs are both fully supported, production-ready approaches in .NET 8. The choice is not about capability, it’s about structure and team needs. &lt;/p&gt;

&lt;p&gt;Controllers provide conventions by default. With [ApiController], built-in validation behavior, and mature MVC patterns, they are a strong default for large, long-lived APIs with multiple contributors.&lt;/p&gt;

&lt;p&gt;Minimal APIs offer explicit, endpoint-first composition. They work especially well for focused services, microservices, or teams that prefer fluent configuration, as long as structure is enforced through route groups, modules, and consistent policies.&lt;/p&gt;

&lt;p&gt;Performance differences are usually negligible compared to database, network, and serialization costs. Maintainability and governance should drive the decision.&lt;/p&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Choose &lt;strong&gt;Controllers&lt;/strong&gt; when you want built-in structure and consistency.&lt;/li&gt;
&lt;li&gt;  Choose &lt;strong&gt;Minimal APIs&lt;/strong&gt; when you want lean composition and are willing to design structure intentionally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both approaches are valid. The right choice depends on your team, domain complexity, and long-term ownership model.&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;&lt;strong&gt;Ready to future‑proof your API strategy? Explore the right choice between Controllers and Minimal APIs now.&lt;/strong&gt;&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/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/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/common-signature-api-challenges/" rel="noopener noreferrer"&gt;What Are the Common Challenges When Using Signature APIs in Software Development&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>dotnet</category>
      <category>api</category>
      <category>documents</category>
    </item>
    <item>
      <title>Programmatic Template Editing Using the BoldSign Edit Template API</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 01 Apr 2026 09:44:55 +0000</pubDate>
      <link>https://forem.com/boldsign/programmatic-template-editing-using-the-boldsign-edit-template-api-1lmg</link>
      <guid>https://forem.com/boldsign/programmatic-template-editing-using-the-boldsign-edit-template-api-1lmg</guid>
      <description>&lt;p&gt;Templates often serve as living configuration in production eSignature workflows. As businesses scale, these templates change frequently, such as adding new approval steps, updated policies, branding refreshes, or additional required fields. When such updates are handled manually through dashboards, templates can drift across environments and introduce inconsistencies that break automated processes.&lt;/p&gt;

&lt;p&gt;The BoldSign Edit Template API solves this by allowing developers to update existing or draft templates programmatically. You can modify metadata, signer roles, and form fields directly from your backend or CI/CD pipelines, keeping templates synchronized with application logic while reducing operational overhead and human error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why edit templates programmatically
&lt;/h2&gt;

&lt;p&gt;Templates often act as “living configuration” in production workflows. Over time, teams update templates due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  New approval steps (HR, finance)&lt;/li&gt;
&lt;li&gt;  Policy changes (legal, compliance)&lt;/li&gt;
&lt;li&gt;  Branding refreshes (marketing)&lt;/li&gt;
&lt;li&gt;  New mandatory fields (operations)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these updates happen manually in the dashboard, templates can drift across environments (sandbox vs production) and become inconsistent. With the Edit Template API, you can apply controlled updates from your backend or CI/CD pipelines, keeping templates synchronized with your application logic while reducing operational overhead and human error.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you update using the Edit Template API
&lt;/h2&gt;

&lt;p&gt;You can update common template configuration elements, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Template title:&lt;/strong&gt; Rename the template to reflect its updated purpose.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Template description:&lt;/strong&gt; Add or revise the summary of what the template is for.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Document title:&lt;/strong&gt; Change the title that signers see on the document.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Document message:&lt;/strong&gt; Update the message that accompanies the request to sign.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Signer roles:&lt;/strong&gt; Add, remove, reorder, or rename roles (e.g., “Manager”, “Client”).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Form fields:&lt;/strong&gt; Edit or add input elements (signature, text, date, checkbox) bound to pages and roles.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Signing order settings:&lt;/strong&gt; Toggle and adjust signer order behavior when relevant.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What can’t you change using the Edit Template API
&lt;/h2&gt;

&lt;p&gt;The following changes are not supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The document file itself (PDF or DOCX): If the underlying document needs to change, you must create a new template.&lt;/li&gt;
&lt;li&gt;  Template ID&lt;/li&gt;
&lt;li&gt;  Sent documents: Edits only apply to templates, not documents already sent for signing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Partial updates vs nested updates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Top-level fields support partial updates&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For simple changes like title, description, &lt;code&gt;documentTitle&lt;/code&gt;, &lt;code&gt;documentMessage&lt;/code&gt;, or &lt;code&gt;enableSigningOrder&lt;/code&gt;, you can send only the fields you want to change.&lt;/p&gt;

&lt;p&gt;Result: Unspecified top-level fields remain unchanged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Nested objects must be complete (roles and form fields)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you update nested objects (like roles or a role’s formFields), you should assume you are replacing the existing array.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Updating roles&lt;/strong&gt; replaces the entire roles list
Include every role you want to keep, not only the one you changed.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Updating formFields&lt;/strong&gt; for a role replaces that role’s field list
Include the full set you want to keep, preserving field IDs when updating existing fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Safe pattern&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Fetch Template Properties&lt;/li&gt;
&lt;li&gt; Edit the JSON in memory&lt;/li&gt;
&lt;li&gt; PUT the updated structure back&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Field naming note:&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
Template Properties responses may not match the exact request field names used by Edit Template in every SDK/version. Don’t copy/paste the Template Properties JSON directly into the Edit Template payload, map fields as needed (especially for form fields).&lt;/p&gt;
&lt;h2&gt;
  
  
  What you’ll need before calling the Edit Template API
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;  A &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;BoldSign account&lt;/a&gt; (sandbox or production).&lt;/li&gt;
&lt;li&gt;  An &lt;a href="https://developers.boldsign.com/authentication/api-key" rel="noopener noreferrer"&gt;API key&lt;/a&gt; (or &lt;a href="https://developers.boldsign.com/authentication/oauth-2-0" rel="noopener noreferrer"&gt;OAuth2 access token&lt;/a&gt;&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;  The TemplateId of the template you want to update.&lt;/li&gt;
&lt;/ul&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 safely edit a template step by step
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Retrieve Template Properties&lt;/strong&gt;
Get the full structure of the template, especially important before nested edits. You can refer to the following link to access the template properties : &lt;a href="https://developers.boldsign.com/template/template-details" rel="noopener noreferrer"&gt;Get Template Properties&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Plan minimal changes&lt;/strong&gt;
Decide whether a top-level partial update is enough (e.g., title only) or whether you must update roles/fields.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Prepare the payload&lt;/strong&gt; 
For nested edits, start from fetched JSON, modify only what’s needed, and keep unchanged roles/fields intact. &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Send the update&lt;/strong&gt;
PUT /v1/template/edit?templateId= with your chosen auth header.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Verify&lt;/strong&gt;
Fetch Template Properties again or run a &lt;a href="https://account.boldsign.com/signup?planId=1076&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;sandbox&lt;/a&gt; send to confirm behavior.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  How do you update only the template title (top-level partial update)
&lt;/h2&gt;

&lt;p&gt;When you only need to change the template title, send just the title field. Everything else remains unchanged.&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; &lt;span class="s1"&gt;'PUT'&lt;/span&gt; &lt;span class="se"&gt;\ &lt;/span&gt;
      &lt;span class="s1"&gt;'https://api.boldsign.com/v1/template/edit?templateId={YOUR_TEMPLATE_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;'accept: */*'&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;'{ 
      "title": "Title of the template" 
    }'&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;templateClient&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;TemplateClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_TEMPLATE_ID"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"A new title for template"&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;templateClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;EditTemplateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;editTemplateRequest&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;template_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;TemplateApi&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;edit_template_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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;    
            &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A new title for template&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="n"&gt;template_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;edit_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template_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_TEMPLATE_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;edit_template_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;edit_template_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="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;TemplateApi&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;$template_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_TEMPLATE_ID'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="nv"&gt;$edit_template_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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nv"&gt;$edit_template_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Updated Template Title'&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;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;editTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$template_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$edit_template_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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;TemplateApi&lt;/span&gt; &lt;span class="n"&gt;templateApi&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;TemplateApi&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;EditTemplateRequest&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setTitle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"A new title for template"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;templateId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"YOUR_TEMPLATE_ID"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;templateApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;editTemplate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;templateId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;TemplateApi&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EditTemplateRequest&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;templateApi&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;TemplateApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nx"&gt;templateApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nx"&gt;editTemplateRequest&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;Updated Template Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;templateId&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_TEMPLATE_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;templateApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;editTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;templateId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;editTemplateRequest&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 update roles and form fields (nested update pattern)
&lt;/h2&gt;

&lt;p&gt;Key rule: Include &lt;code&gt;enableSigningOrder&lt;/code&gt; whenever roles are present.&lt;br&gt;&lt;br&gt;
When your request includes roles, always include &lt;code&gt;enableSigningOrder&lt;/code&gt; explicitly (true or false). This ensures signer sequencing is unambiguous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended approach&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Fetch Template Properties&lt;/li&gt;
&lt;li&gt; Modify roles/fields in memory (keep unchanged roles/fields)&lt;/li&gt;
&lt;li&gt; Send the updated roles along with &lt;code&gt;enableSigningOrder&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Below is an example code snippet&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;cURL C# Python PHP Java Node js&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    curl &lt;span class="nt"&gt;-X&lt;/span&gt; &lt;span class="s1"&gt;'PUT'&lt;/span&gt; &lt;span class="se"&gt;\ &lt;/span&gt;
      &lt;span class="s1"&gt;'https://api.boldsign.com/v1/template/edit?templateId={YOUR_TEMPLATE_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;'accept: */*'&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;'{ 
      "enableSigningOrder": true, 
      "roles": [ 
        { 
          "name": "Customer", 
          "index": 1, 
          "signerOrder": 1, 
          "defaultSignerName": "Alex", 
          "defaultSignerEmail": "alexgayle@boldsign.dev", 
          "signerType": "Signer", 
          "locale": "EN", 
          "formFields": [ 
            { 
              "id": "Signature1", 
              "fieldType": "Signature", 
              "pageNumber": 1, 
              "bounds": { 
                "x": 100, 
                "y": 100, 
                "width": 200, 
                "height": 20 
              }, 
              "isRequired": true  
            } 
          ] 
        } 
      ] 
    }'&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;templateClient&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;TemplateClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Signature1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;templateRoles&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;TemplateRole&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Manager"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;Index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;DefaultSignerName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;" Alex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;DefaultSignerEmail&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"alexgayle@boldsign.dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;SignerType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SignerType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;FormFields&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;formFields&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;SignerOrder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;AllowRoleEdit&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;AllowRoleDelete&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"YOUR_TEMPLATE_ID"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;EnableSigningOrder&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;Roles&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;templateRoles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;templateClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;EditTemplateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;editTemplateRequest&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;template_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;TemplateApi&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;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;FormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
                &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Signature1&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;sign&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;Signature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="n"&gt;pageNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="n"&gt;font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Helvetica&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="n"&gt;bounds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boldsign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
                &lt;span class="n"&gt;isRequired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt; 
            &lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="p"&gt;]&lt;/span&gt; 
        &lt;span class="n"&gt;role&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;TemplateRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
            &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;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;Manager&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;defaultSignerName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alex Gayle&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;defaultSignerEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alexgayle@boldsign.dev&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;signerType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Signer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;formFields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form_fields&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_template_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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;    
            &lt;span class="n"&gt;enableSigningOrder&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;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
        &lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="n"&gt;template_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;edit_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template_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_TEMPLATE_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;edit_template_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;edit_template_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="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;TemplateApi&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;$template_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_TEMPLATE_ID'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="c1"&gt;// Create form field &lt;/span&gt;
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFieldType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Signature'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPageNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$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="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;50&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; 
    &lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$bounds&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
    &lt;span class="c1"&gt;// Create role and assign form field &lt;/span&gt;
    &lt;span class="nv"&gt;$role&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;TemplateRole&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nv"&gt;$role&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="s1"&gt;'Signer'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setDefaultSignerEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'alexgayle@boldsign.dev'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setDefaultSignerName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Alex Gayle'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setSignerOrder&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;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setIndex&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;$role&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setFormFields&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;$signatureField&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; 
    &lt;span class="c1"&gt;// Create edit template request &lt;/span&gt;
    &lt;span class="nv"&gt;$edit_template_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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nv"&gt;$edit_template_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEnableSigningOrder&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;$edit_template_request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setRoles&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;$role&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;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;editTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$template_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$edit_template_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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;TemplateApi&lt;/span&gt; &lt;span class="n"&gt;templateApi&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;TemplateApi&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;FormField&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;FormField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&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;FormField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FieldTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIGNATURE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;TemplateRole&lt;/span&gt; &lt;span class="n"&gt;role&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;TemplateRole&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setIndex&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&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;"Manager"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDefaultSignerName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Alex"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
        &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDefaultSignerEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"alexgayle@boldsign.dev"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSignerOrder&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSignerType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TemplateRole&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SignerTypeEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIGNER&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;role&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="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;EditTemplateRequest&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEnableSigningOrder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setRoles&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;role&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;templateId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"YOUR_TEMPLATE_ID"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; 
    &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;templateApi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;editTemplate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;templateId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;editTemplateRequest&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;TemplateApi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TemplateRole&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;FormField&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;templateApi&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;TemplateApi&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nx"&gt;templateApi&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;var&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;TextBox&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;var&lt;/span&gt; &lt;span class="nx"&gt;editTemplateRequest&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;EditTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nx"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enableSigningOrder&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;role&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;TemplateRole&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&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;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultSignerEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alexgayle@boldsign.dev&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultSignerName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="nx"&gt;role&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;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signerOrder&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;role&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="nx"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;templateId&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_TEMPLATE_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;templateApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;editTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;templateId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;editTemplateRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-world use cases of the Edit Template API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) HR offer letters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; A candidate’s role changes from “Developer” to “Engineer” right before sending the offer.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Update the template roles/messages instantly without recreating or editing in the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Sales contracts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; High-value deals require an additional “Legal Reviewer” role.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Add/reorder roles and enforce signing order programmatically for compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Operations &amp;amp; compliance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; A new checkbox/date field becomes mandatory across agreements.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Update form fields programmatically across templates to align with policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Marketing agreements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; Campaign names or project titles change frequently.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Update template metadata dynamically so documents remain current and professional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary: Managing templates with BoldSign APIs
&lt;/h2&gt;

&lt;p&gt;Templates are foundational when your eSignature workflows must evolve with business needs. With the Edit Template API, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Update titles, descriptions, and messages via partial updates&lt;/li&gt;
&lt;li&gt;  Adjust signer roles and form fields via complete nested updates&lt;/li&gt;
&lt;li&gt;  Reduce drift caused by manual edits&lt;/li&gt;
&lt;li&gt;  Keep templates consistent across environments and teams&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://developers.boldsign.com/how-to-guides/edit-a-template-using-API" rel="noopener noreferrer"&gt;Editing templates programmatically&lt;/a&gt; is a smart way to keep eSignature workflows flexible and stable at scale. Use partial updates for top-level changes and the fetch–modify–update pattern for roles and fields to prevent accidental overwrites. With a few API calls, your team can keep templates current, reduce operational burden, and maintain consistency across environments.&lt;/p&gt;

&lt;p&gt;If you’d like to learn more about &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&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 &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/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/common-signature-api-challenges/" rel="noopener noreferrer"&gt;What Are the Common Challenges When Using Signature APIs in Software Development&lt;/a&gt;
&lt;/li&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;/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>Select Visual Studio Enterprise Subscribers: Get 12 Months of BoldSign Growth Plan + 50 API Credits</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 31 Mar 2026 07:22:47 +0000</pubDate>
      <link>https://forem.com/boldsign/select-visual-studio-enterprise-subscribers-get-12-months-of-boldsign-growth-plan-50-api-credits-57om</link>
      <guid>https://forem.com/boldsign/select-visual-studio-enterprise-subscribers-get-12-months-of-boldsign-growth-plan-50-api-credits-57om</guid>
      <description>&lt;p&gt;Visual Studio Enterprise subscribers now receive one year of the BoldSign Growth plan as part of their subscriber benefits. This gives developers a low-risk way to embed an eSignature solution, automate document workflows, and test production-ready signing software. SaaS teams can launch native signing experiences without upfront subscription costs for 12 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s included in the benefit
&lt;/h2&gt;

&lt;p&gt;When you &lt;a href="https://aka.ms/VSS/ActivateSyncfusion" rel="noopener noreferrer"&gt;activate the BoldSign benefit&lt;/a&gt;, you unlock the full BoldSign Growth Plan along with API credits, which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Unlimited reusable &lt;a href="https://developers.boldsign.com/template/create-template/?region=us" rel="noopener noreferrer"&gt;templates&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/embedded-request/create-embedded-request-link/?region=us" rel="noopener noreferrer"&gt;Embedded requesting&lt;/a&gt; (send documents from inside your app).&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/embedded-signing/get-embedded-signing-link/?region=us" rel="noopener noreferrer"&gt;Embedded signing&lt;/a&gt; (users sign without leaving your UI).&lt;/li&gt;
&lt;li&gt;  Custom &lt;a href="https://developers.boldsign.com/branding/create-brand/?region=us" rel="noopener noreferrer"&gt;branding&lt;/a&gt; and &lt;a href="https://support.boldsign.com/kb/article/52/configure-email-custom-domain" rel="noopener noreferrer"&gt;custom email domain&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/teams/create-team/?region=us" rel="noopener noreferrer"&gt;Team management&lt;/a&gt; and roles.&lt;/li&gt;
&lt;li&gt;  Full &lt;a href="https://developers.boldsign.com/api-overview/getting-started/?region=us" rel="noopener noreferrer"&gt;API&lt;/a&gt; and &lt;a href="https://developers.boldsign.com/sdks/overview/?region=us" rel="noopener noreferrer"&gt;SDK&lt;/a&gt; access.&lt;/li&gt;
&lt;li&gt;  50 API document credits included.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do API usage and pricing work?
&lt;/h2&gt;

&lt;p&gt;The 12-month benefit period includes full access to BoldSign:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  First 50 API documents are included.&lt;/li&gt;
&lt;li&gt;  Additional API sends cost $0.75 per document.&lt;/li&gt;
&lt;li&gt;  A credit card is required only for verification.&lt;/li&gt;
&lt;li&gt;  You will be charged only if you exceed the included credits.&lt;/li&gt;
&lt;li&gt;  After 12 months, the plan renews at $5 per month (cancel at any time).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup is ideal for evaluation, prototyping, and early-stage launches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do developers choose BoldSign for embedded workflows?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Native, in-app signing.&lt;/li&gt;
&lt;li&gt;  Seamless experience with no redirects or external signing pages.&lt;/li&gt;
&lt;li&gt;  Fast developer onboarding.&lt;/li&gt;
&lt;li&gt;  Sandbox, templates, embedded signing, and webhooks setup can be completed in a single day.&lt;/li&gt;
&lt;li&gt;  Consistent product experience.&lt;/li&gt;
&lt;li&gt;  Unified branding across signer pages, emails, and workflows.&lt;/li&gt;
&lt;li&gt;  Scalable automation.&lt;/li&gt;
&lt;li&gt;  Flexible mix of manual, template-based, and API-driven flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Do all users need a BoldSign account?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Required:&lt;/strong&gt; Anyone who sends, manages, or requests signatures.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Not required:&lt;/strong&gt; People who only sign documents. (Signers do not need an account, which reduces friction.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What should I know about BoldSign security and compliance?
&lt;/h2&gt;

&lt;p&gt;BoldSign is built with enterprise-grade security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  End-to-end encryption.&lt;/li&gt;
&lt;li&gt;  Secure, regulatory-compliant document storage.&lt;/li&gt;
&lt;li&gt;  Detailed audit logs.&lt;/li&gt;
&lt;li&gt;  SOC 2-aligned processes.&lt;/li&gt;
&lt;li&gt;  Fine-grained organization access controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All document actions are fully traceable and tamper evident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is a valuable one-year opportunity
&lt;/h2&gt;

&lt;p&gt;The included 12-month access period gives developers enough time to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Build complete, embedded eSignature workflows. &lt;/li&gt;
&lt;li&gt;  Automate recurring document processes. &lt;/li&gt;
&lt;li&gt;  Test signing inside their apps. &lt;/li&gt;
&lt;li&gt;  Validate API integrations. &lt;/li&gt;
&lt;li&gt;  Scale usage without upfront subscription commitments. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a practical, low-risk way to integrate eSignatures into SaaS products or internal workflows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Want to build embedded eSignature workflows in minutes? Start here:
&lt;/h2&gt;

&lt;p&gt;If you want to get started on building an end-to-end embedded signing experience, our technical guides cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/api-overview/developer-sandbox-account/?region=us" rel="noopener noreferrer"&gt;Sandbox setup&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/template/create-template/?region=us" rel="noopener noreferrer"&gt;Template creation and management&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/how-to-guides/integrate-embedded-signing-in-your-website-or-application/" rel="noopener noreferrer"&gt;Generating embedded signing URLs&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/webhooks/introduction/?region=us" rel="noopener noreferrer"&gt;Handling callbacks, events, and webhooks&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to activate your BoldSign account through the Visual Studio subscriber benefits portal:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; Open your &lt;a href="https://aka.ms/VSS/ActivateSyncfusion" rel="noopener noreferrer"&gt;Visual Studio Subscriber Benefits&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt; Find the BoldSign benefit tile.&lt;/li&gt;
&lt;li&gt; Select Activate.&lt;/li&gt;
&lt;li&gt; Complete the signup.&lt;/li&gt;
&lt;li&gt; Start sending documents immediately.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/common-signature-api-challenges" rel="noopener noreferrer"&gt;What Are the Common Challenges When Using Signature APIs in Software Development&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/free-esignature-plan-a-win-win-strategy-for-both-users-and-boldsign/" rel="noopener noreferrer"&gt;Free eSignature Plan: A Win-Win Strategy for Both Users and BoldSign&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>visualstudio</category>
      <category>boldsign</category>
    </item>
    <item>
      <title>Introducing BoldSign’s Snapchat QR Code Generator</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 30 Mar 2026 09:32:36 +0000</pubDate>
      <link>https://forem.com/boldsign/introducing-boldsigns-snapchat-qr-code-generator-1o01</link>
      <guid>https://forem.com/boldsign/introducing-boldsigns-snapchat-qr-code-generator-1o01</guid>
      <description>&lt;p&gt;A Snapchat QR code allows anyone to open your profile instantly with a single scan. With BoldSign’s free Snapchat QR code generator, you can convert any Snapchat link into a scannable QR code within seconds with no signup, no watermark, and no usage limits.&lt;/p&gt;

&lt;p&gt;Whether you are boosting your brand, growing a creator audience, connecting with customers, or adding Snapchat to your digital identity, this guide covers how Snapchat QR codes work and how to use them effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Snapchat QR code
&lt;/h2&gt;

&lt;p&gt;A Snapchat QR code is a scannable code that opens your Snapchat profile, public account, or Snap-specific link when someone points their smartphone camera at it. You can link to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A Snapchat profile&lt;/li&gt;
&lt;li&gt;  A public creator page&lt;/li&gt;
&lt;li&gt;  A Snap code URL&lt;/li&gt;
&lt;li&gt;  A direct add me link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; It removes the friction of searching usernames manually or dealing with typos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use a Snapchat QR code
&lt;/h2&gt;

&lt;p&gt;A Snapchat QR code makes sharing your profile faster, simpler, and more effective across social media, marketing materials, and offline channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Instant audience growth- People can follow your Snapchat account in one scan.&lt;/li&gt;
&lt;li&gt;  Better engagement – Useful at events, booths, stores, or meetups where quick access matters.&lt;/li&gt;
&lt;li&gt;  Stronger digital identity – Add it to websites, posters, product packaging, portfolios, or social bios.&lt;/li&gt;
&lt;li&gt;  Smartphone friendly – Modern cameras scan QR codes natively without any extra apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to create a Snapchat QR code for free
&lt;/h2&gt;

&lt;p&gt;Creating your Snapchat QR code takes less than a minute. Just follow these steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will need&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Your Snapchat link&lt;/li&gt;
&lt;li&gt;  Any desktop or mobile browser&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Copy your Snapchat URL&lt;/strong&gt;
Use your profile link, public page URL, or Snap code link.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Paste it into BoldSign’s Snapchat QR code generator&lt;/strong&gt;
Your QR code appears instantly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Customize your QR code&lt;/strong&gt;
Adjust options such as:

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


&lt;/li&gt;

&lt;li&gt;  &lt;em&gt;&lt;strong&gt;&lt;em&gt;Download and share&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;
Export your QR code as*&lt;em&gt;:&lt;/em&gt;*

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


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftyszv0rz2vzi6gqu5tj3.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%2Ftyszv0rz2vzi6gqu5tj3.png" alt="" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;BoldSign’s tool is built for privacy, speed, and clean professional output.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;100% free forever:&lt;/strong&gt; No fees, no watermarks, no limits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Privacy first:&lt;/strong&gt; Your Snapchat link never leaves your browser. We do not store or track your data.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Instant results:&lt;/strong&gt; Create high-quality QR codes in seconds.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Works on any device:&lt;/strong&gt; Compatible with Windows, macOS, Linux, iOS, and Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best ways to use a Snapchat QR code
&lt;/h2&gt;

&lt;p&gt;Snapchat QR codes can elevate your digital presence across both online and physical spaces. Here are powerful ways to use them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Business cards:&lt;/strong&gt; Make your contact card instantly scannable.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Product packaging:&lt;/strong&gt; Let customers access offers, tutorials, or behind-the-scenes content.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Websites and landing pages:&lt;/strong&gt; Add it to your portfolio, link in bio, or homepage.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Events and pop ups:&lt;/strong&gt; Display it at booths, banners, or digital screens for instant audience connection.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Print marketing:&lt;/strong&gt; Add it to posters, flyers, menus, brochures, or store signage.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Creator branding:&lt;/strong&gt; Great for merch, stickers, giveaways, and creator kits.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A Snapchat QR code makes it easier for people to find and follow you instantly. It boosts visibility, enhances your brand identity, and removes the friction of searching usernames manually.&lt;/p&gt;

&lt;p&gt;Create your &lt;a href="https://boldsign.com/snapchat-qr-code-generator?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Snapchat QR Code&lt;/a&gt; with BoldSign today and start building stronger, smarter connections.&lt;/p&gt;

&lt;p&gt;Ready to simplify your document workflows? 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&lt;/a&gt; trial 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-qr-code-for-wifi/" rel="noopener noreferrer"&gt;Generate a Wi-Fi QR Code: Free, Simple, and Secure&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>snapchat</category>
      <category>boldsign</category>
    </item>
    <item>
      <title>Electronic Signature in Healthcare: Where They Help Most</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Fri, 27 Mar 2026 06:21:46 +0000</pubDate>
      <link>https://forem.com/boldsign/electronic-signature-in-healthcare-where-they-help-most-1gn6</link>
      <guid>https://forem.com/boldsign/electronic-signature-in-healthcare-where-they-help-most-1gn6</guid>
      <description>&lt;p&gt;A busy clinic receptionist needs a patient’s signed consent before a simple procedure, but the paper consent form is missing from the file. Filling, printing, chasing signatures, and scanning eat-up time and frustrate patients. What they really need is a quick, secure way to collect signatures digitally that fit into clinical workflows without extra hassle. Tools like BoldSign can step in as a simple helper to collect, track, and store those signatures securely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why e‑signatures matter in healthcare
&lt;/h2&gt;

&lt;p&gt;Health providers handle lots of forms that must be signed correctly and stored securely. Paper slows care, increases errors, and makes audits harder. E-signatures reduce friction, improve traceability, and support faster patient flow, helpful for clinics, hospitals, telehealth providers, and billing teams. &lt;/p&gt;

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

&lt;p&gt;A small dental practice sees six patients per hour. Each patient must sign an intake form, a consent for treatment, and a privacy notice. The clinic currently uses paper forms on a clipboard. Sometimes forms are illegible, sometimes a printed form is misplaced, and staff must reprint or call patients. The practice needs a simple, secure digital signing flow so patients can sign a tablet in the waiting room or finish at home before the appointment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common paper-based workflow
&lt;/h3&gt;

&lt;p&gt;Some clinics try to solve this by scanning signed paper into a shared folder or emailing PDFs back and forth. Problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Extra manual steps: scan, rename, move files. &lt;/li&gt;
&lt;li&gt;  Hard to track whether a form is signed or which version is current. &lt;/li&gt;
&lt;li&gt;  Security and access control are inconsistent. &lt;/li&gt;
&lt;li&gt;  Audits become time-consuming because records are scattered. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A better digital workflow
&lt;/h3&gt;

&lt;p&gt;Design a simple e-sign workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Create a single template for each form type (intake, consent, release). &lt;/li&gt;
&lt;li&gt; Collect patient data once and send a secure link or present a tablet for on-site signing.&lt;/li&gt;
&lt;li&gt; Save the signed document directly into the patient’s record with access logs. &lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;  Faster check-in. &lt;/li&gt;
&lt;li&gt;  Fewer filing errors and lost forms. &lt;/li&gt;
&lt;li&gt;  Clear audit trail (who signed, when, where). &lt;/li&gt;
&lt;li&gt;  Patients can sign remotely before their appointment. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How tools like BoldSign support this workflow
&lt;/h2&gt;

&lt;p&gt;E-signature platforms provide the building blocks for the workflow above, templating, field pre-fill, signer authentication, secure storage, and audit logs. Below is a simple, generic example of workflow:&lt;/p&gt;

&lt;p&gt;Typical steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Upload or create a template for consent forms. &lt;/li&gt;
&lt;li&gt;  Send a secure signing link to the patient (or open on a clinic tablet). &lt;/li&gt;
&lt;li&gt;  Receive the signed document and store it in the patient’s record with an audit trail. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Takeaway: Use templates and pre-fill fields to cut patient time-to-sign and avoid manual data entry. &lt;/p&gt;

&lt;h2&gt;
  
  
  Security and privacy considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Use secure authentication for accessing e-sign tools. &lt;/li&gt;
&lt;li&gt;  Limit who can view or send sensitive forms. &lt;/li&gt;
&lt;li&gt;  Ensure transport (HTTPS) and storage are encrypted.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  Create reusable templates for each form type. &lt;/li&gt;
&lt;li&gt;  Pre-fill fields from the EHR to reduce typing and errors. &lt;/li&gt;
&lt;li&gt;  Provide multiple signing options. Ex: on-tablet, email link. &lt;/li&gt;
&lt;li&gt;  Use signer authentication appropriate to the risk level (Email OTP, SMS OTP, Access code). &lt;/li&gt;
&lt;li&gt;  Keep an audit trail, signer identity, timestamp, IP address, etc. &lt;/li&gt;
&lt;li&gt;  Train staff on the new workflow so they can assist patients quickly. &lt;/li&gt;
&lt;li&gt;  Test the signing process on common device types (phones, tablets) before rolling out.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;E-signatures simplify many administrative tasks in healthcare by cutting down waiting times, reducing errors, and giving a clear audit trail. When combined with templates and proper authentication, they fit naturally into clinical workflows, improving patient experience and freeing staff to focus on care. &lt;/p&gt;

&lt;p&gt;Get started today! Sign up for a 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&lt;/a&gt; account and begin managing tasks with just a few steps. For questions or assistance, visit our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support portal&lt;/a&gt; or 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;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/electronic-signatures-for-healthcare-consent-forms/" rel="noopener noreferrer"&gt;Electronic Signatures for Healthcare Consent Forms&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/esignatures-for-healthcare-digitizing-medical-records/" rel="noopener noreferrer"&gt;Digitizing Medical Records: Secure and HIPAA-Compliant eSignatures for Healthcare Providers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/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;/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>healthcare</category>
      <category>privacy</category>
      <category>documents</category>
    </item>
    <item>
      <title>Join Our Webinar: Find Any Contract in Seconds with BoldSign’s AI Search</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 25 Mar 2026 09:27:31 +0000</pubDate>
      <link>https://forem.com/boldsign/join-our-webinar-find-any-contract-in-seconds-with-boldsigns-ai-search-1a6a</link>
      <guid>https://forem.com/boldsign/join-our-webinar-find-any-contract-in-seconds-with-boldsigns-ai-search-1a6a</guid>
      <description>&lt;p&gt;As document volume grows, teams spend more time filtering and searching instead of moving work forward. AI Search solves this by understanding natural language queries, applying the correct filters automatically, and ranking results so the most relevant documents appear first.&lt;/p&gt;

&lt;p&gt;Led by Gayathri Annamalai, a Software Developer at Syncfusion, this session will walk you through real-world examples of how AI Search helps teams follow up faster, reduce manual checks, and work more efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Webinar details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Date: March 27, 2026&lt;/li&gt;
&lt;li&gt;  Time: 10:00 AM ET&lt;/li&gt;
&lt;li&gt;  Duration: 40 minutes + live Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;  Speaker: Gayathri Annamalai&lt;/li&gt;
&lt;li&gt;  Registration: &lt;a href="https://boldsign.com/webinars/find-contracts-instantly-with-ai-search/register?utm_source=webinar_boldsign_blog_pt&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Register now&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who this webinar is for
&lt;/h2&gt;

&lt;p&gt;This session is ideal for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Operations teams managing process efficiency and document throughput&lt;/li&gt;
&lt;li&gt;  Sales and customer success leaders who depend on fast follow ups and SLA driven workflows&lt;/li&gt;
&lt;li&gt;  Legal and contract teams handling agreements, reviews, and high volumes of documents&lt;/li&gt;
&lt;li&gt;  BoldSign administrators who oversee user management, workflow setup, and organization-wide search&lt;/li&gt;
&lt;li&gt;  High volume teams that need quick access to pending, expiring, or time sensitive documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your work depends on finding the right documents quickly and minimizing manual filtering, this webinar is for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agenda: What we will cover
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why AI Search now
&lt;/h3&gt;

&lt;p&gt;How traditional filtering breaks down as document volume increases, and why teams need a smarter way to locate contracts.&lt;/p&gt;

&lt;h3&gt;
  
  
  How AI Search works
&lt;/h3&gt;

&lt;p&gt;A simple overview of how natural language intent becomes automatically applied filters and ranked results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Natural language query examples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some examples of real queries you can type directly into AI Search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Documents waiting for my signature&lt;/li&gt;
&lt;li&gt;  Contracts sent last month that are still pending&lt;/li&gt;
&lt;li&gt;  Show completed contracts from last month&lt;/li&gt;
&lt;li&gt;  Find agreements updated in the last 7 days&lt;/li&gt;
&lt;li&gt;  NDA documents sent by John this month&lt;/li&gt;
&lt;li&gt;  Expired documents between January 1 and January 15&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Live demo
&lt;/h3&gt;

&lt;p&gt;Real examples showing how teams can use everyday language to find what they need in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best practices
&lt;/h3&gt;

&lt;p&gt;How to write effective queries for accuracy, speed, and better prioritization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q&amp;amp;A
&lt;/h3&gt;

&lt;p&gt;Get your questions answered live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why attend?
&lt;/h2&gt;

&lt;p&gt;You will get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A clear understanding of how AI Search reduces manual filtering&lt;/li&gt;
&lt;li&gt;  Live, practical examples of everyday queries across teams&lt;/li&gt;
&lt;li&gt;  Simple techniques to make searching faster and more accurate&lt;/li&gt;
&lt;li&gt;  Insights from BoldSign experts who work directly on product and engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What you will be able to do after the webinar
&lt;/h2&gt;

&lt;p&gt;After this session, you should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Search in plain English to find documents by status, date, signer, template, and more&lt;/li&gt;
&lt;li&gt;  Combine multiple conditions in a single query, including status, date range, owner, and document type&lt;/li&gt;
&lt;li&gt;  Prioritize work faster using AI ranked results that surface what matters most&lt;/li&gt;
&lt;li&gt;  Accelerate follow ups by instantly finding pending, expiring, or stalled documents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reserve your spot
&lt;/h2&gt;

&lt;p&gt;Don’t miss this opportunity to experience the new AI Search capabilities in BoldSign.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://boldsign.com/webinars/find-contracts-instantly-with-ai-search/register?utm_source=webinar_boldsign_blog_pt&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Register now&lt;/a&gt; to see how natural language queries and AI-driven ranking can dramatically speed up your daily workflows.&lt;/p&gt;

&lt;p&gt;For questions, contact us at &lt;a href="mailto:support@boldsign.com"&gt;support@boldsign.com&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/embed-esignature-workflows-dotnet-app/" rel="noopener noreferrer"&gt;Webinar Show Notes: Embed eSignature Workflows in .NET App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-new-features-webinar-recap/" rel="noopener noreferrer"&gt;Webinar Show Notes: What’s New in BoldSign&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-zapier-integration-webinar-recap/" rel="noopener noreferrer"&gt;Webinar Show Notes – Automate Google Sheets with BoldSign &amp;amp; Zapier&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>contract</category>
      <category>documentsigning</category>
    </item>
    <item>
      <title>What Are the Common Challenges When Using Signature APIs in Software Development</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Tue, 24 Mar 2026 06:47:21 +0000</pubDate>
      <link>https://forem.com/boldsign/what-are-the-common-challenges-when-using-signature-apis-in-software-development-elb</link>
      <guid>https://forem.com/boldsign/what-are-the-common-challenges-when-using-signature-apis-in-software-development-elb</guid>
      <description>&lt;p&gt;Signature APIs usually work flawlessly in development, but start failing the moment they hit real production traffic, real documents, and real recipients. The reason is simple: eSignature workflows aren’t “one API call.” They’re distributed, stateful, multistep systems that break at predictable failure points like authentication, PDF rendering inconsistencies, webhook handling, template drift, deliverability issues, compliance gaps, and retry storms.&lt;/p&gt;

&lt;p&gt;This guide breaks down the seven most common reasons Signature API integrations fail in production and the engineering patterns that prevent them. You’ll see exactly where real-world systems fail, what reliable teams do differently, and how BoldSign’s builtin capabilities eliminate these reliability gaps from day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do Signature API integrations fail after they reach production
&lt;/h2&gt;

&lt;p&gt;Because a signing workflow is not “one API call.”&lt;/p&gt;

&lt;p&gt;It’s an orchestration system with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Authentication&lt;/li&gt;
&lt;li&gt;  Document rendering&lt;/li&gt;
&lt;li&gt;  Field placement&lt;/li&gt;
&lt;li&gt;  Notifications&lt;/li&gt;
&lt;li&gt;  Webhooks&lt;/li&gt;
&lt;li&gt;  Lifecycle state changes&lt;/li&gt;
&lt;li&gt;  Evidence collection&lt;/li&gt;
&lt;li&gt;  Compliance storage&lt;/li&gt;
&lt;li&gt;  Retries and rate limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most failures aren’t caused by the provider being “down.”&lt;/p&gt;

&lt;p&gt;They happen because implementations don’t include defensive patterns for real-world conditions.&lt;/p&gt;

&lt;p&gt;If your workflow depends on a single success response, it’s not production-ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  What authentication mistakes cause random 401 errors in Signature APIs
&lt;/h2&gt;

&lt;p&gt;Authentication failures usually don’t show up during testing because sandbox flows are short and clean.&lt;/p&gt;

&lt;p&gt;In production, failures come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Access tokens expiring mid-process&lt;/li&gt;
&lt;li&gt;  Refresh token logic missing or unsafe&lt;/li&gt;
&lt;li&gt;  Multiple servers refreshing at the same time (“refresh storms”)&lt;/li&gt;
&lt;li&gt;  Sandbox and production credentials getting mixed&lt;/li&gt;
&lt;li&gt;  Clock skew causing “expired/not valid yet” surprises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Choose &lt;a href="https://developers.boldsign.com/authentication/introduction/?region=us" rel="noopener noreferrer"&gt;auth&lt;/a&gt; based on your workflow: API key for backend automation, OAuth2 for user-consented access&lt;/li&gt;
&lt;li&gt;  Refresh early (before expiry), not only when it breaks&lt;/li&gt;
&lt;li&gt;  Ensure only one refresh happens at a time&lt;/li&gt;
&lt;li&gt;  Log failures with context (without leaking secrets)&lt;/li&gt;
&lt;li&gt;  Keep sandbox and prod credentials strictly separated&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  Scoped &lt;a href="https://developers.boldsign.com/authentication/api-key" rel="noopener noreferrer"&gt;API keys&lt;/a&gt; that reduce blast radius&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/authentication/oauth-2-0" rel="noopener noreferrer"&gt;OAuth2&lt;/a&gt; guidance and supported flows so you don’t “invent auth”&lt;/li&gt;
&lt;li&gt;  Clear documentation for setting up OAuth2 correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Add the header X-API-KEY: {your-api-key} to every API request to authenticate securely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/authentication/api-key/" rel="noopener noreferrer"&gt;API Key Authentication&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If your access token refresh can trigger from multiple servers at once, you need a single-source refresh mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do signature fields shift or render incorrectly on PDFs
&lt;/h2&gt;

&lt;p&gt;This is one of the most common “it worked yesterday” failures.&lt;/p&gt;

&lt;p&gt;Fields shift because PDFs are not consistent across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Generators (Word → PDF, Google Docs → PDF, print-to-PDF, scanners)&lt;/li&gt;
&lt;li&gt;  Page sizes, rotation, and scaling rules&lt;/li&gt;
&lt;li&gt;  Page boxes (CropBox/MediaBox differences)&lt;/li&gt;
&lt;li&gt;  Font substitution and layout changes&lt;/li&gt;
&lt;li&gt;  Tiny template edits that change coordinates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Treat placement like layout engineering, not guesswork&lt;/li&gt;
&lt;li&gt;  Avoid hard-coded coordinates whenever possible&lt;/li&gt;
&lt;li&gt;  Test with multiple PDF types (scanned, rotated, different sizes)&lt;/li&gt;
&lt;li&gt;  Add a repeatable QA step: “compare final rendered doc vs expected placement”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/how-to-dynamically-position-form-fields-in-esignature-requests-using-api?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Text tags&lt;/a&gt; so fields can anchor to content instead of brittle X/Y math &lt;/li&gt;
&lt;li&gt;  A single switch (UseTextTags=true) enables tag-based placement when &lt;a href="https://support.boldsign.com/kb/article/19195/how-to-request-signature-with-text-tags-for-dynamic-documents-in-boldsign-api" rel="noopener noreferrer"&gt;sending a document&lt;/a&gt;, making field rendering consistent across all PDF types. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Enable text-tag anchoring by setting UseTextTags=true in the /v1/document/send request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/text-tags/introduction/" rel="noopener noreferrer"&gt;Text Tags Introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If a tiny PDF edit breaks your field coordinates, you need text-tag-based anchoring instead of X/Y positioning. &lt;/p&gt;

&lt;h2&gt;
  
  
  What causes webhook failures and missing document updates
&lt;/h2&gt;

&lt;p&gt;Webhooks are where production workflows live or die.&lt;/p&gt;

&lt;p&gt;Failures come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Slow endpoints that timeout&lt;/li&gt;
&lt;li&gt;  Deploys that drop events&lt;/li&gt;
&lt;li&gt;  Duplicate deliveries that double-update states&lt;/li&gt;
&lt;li&gt;  Out-of-order events leading to the wrong final state&lt;/li&gt;
&lt;li&gt;  Skipping signature verification (a security risk)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Respond fast, process later (acknowledge quickly, handle asynchronously)&lt;/li&gt;
&lt;li&gt;  Make handlers idempotent (duplicates should do nothing)&lt;/li&gt;
&lt;li&gt;  Verify authenticity before trusting payloads&lt;/li&gt;
&lt;li&gt;  Model state transitions so late events can’t “rewind” the document&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/webhooks/verify-webhook-events" rel="noopener noreferrer"&gt;Webhooks with signature verification&lt;/a&gt; using X-BoldSign-Signature (HMAC SHA256) &lt;/li&gt;
&lt;li&gt;  Guidance on webhook event &lt;a href="https://developers.boldsign.com/webhooks/introduction" rel="noopener noreferrer"&gt;types and scope&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/webhooks/webhook-configuration-and-lifecycle" rel="noopener noreferrer"&gt;Clear operational requirement&lt;/a&gt; : webhooks should respond quickly (designed to push you toward reliable receivers) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Validate incoming webhook payloads using the X-BoldSign-Signature HMAC-SHA256 header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/webhooks/verify-webhook-events/" rel="noopener noreferrer"&gt;Verify Webhook Events&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If a duplicate webhook can change your document state twice, you need idempotent handlers. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why do templates break automated workflows over time
&lt;/h2&gt;

&lt;p&gt;Templates feel stable until someone edits one field and automation breaks across your product.&lt;/p&gt;

&lt;p&gt;Common failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Roles or fields changed in a live template&lt;/li&gt;
&lt;li&gt;  Automation assumes templates are ready instantly after creation&lt;/li&gt;
&lt;li&gt;  No record of which template version was used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Treat templates like code: version names, changelogs, controlled rollout &lt;/li&gt;
&lt;li&gt;  Never mutate a template silently, create a new version &lt;/li&gt;
&lt;li&gt;  Keep roles consistent and mapped to your app’s signer types &lt;/li&gt;
&lt;li&gt;  Account for asynchronous readiness after creation &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  Role-based templates that fit automation patterns&lt;/li&gt;
&lt;li&gt;  Clear &lt;a href="https://developers.boldsign.com/template/create-template" rel="noopener noreferrer"&gt;template endpoints&lt;/a&gt; and support for template lifecycle behaviors&lt;/li&gt;
&lt;li&gt;  Webhook-style readiness approach for async template processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Create templates via POST /v1/template/create and track readiness using the TemplateCreated webhook event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/template/create-template/" rel="noopener noreferrer"&gt;Create Template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If editing a template can break your automation, you need versioned, immutable templates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do email, SMS, and WhatsApp delivery failures break signing
&lt;/h2&gt;

&lt;p&gt;The most painful production issue isn’t API errors.&lt;/p&gt;

&lt;p&gt;It’s “the signer never received anything.”&lt;/p&gt;

&lt;p&gt;Delivery issues happen because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Email goes to spam or bounces&lt;/li&gt;
&lt;li&gt;  Phone numbers are invalid or missing country codes&lt;/li&gt;
&lt;li&gt;  Carrier filtering blocks SMS&lt;/li&gt;
&lt;li&gt;  WhatsApp numbers may be inactive/unregistered&lt;/li&gt;
&lt;li&gt;  Teams assume “sent = delivered”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Separate “document created” from “recipient notified”&lt;/li&gt;
&lt;li&gt;  Track notification attempts and signer progress separately&lt;/li&gt;
&lt;li&gt;  Provide repair paths: update contact info, resend, switch channels&lt;/li&gt;
&lt;li&gt;  Prefer embedded signing for product-led, in-app flows&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://support.boldsign.com/kb/article/20343/what-are-the-delivery-methods-available-in-boldsign" rel="noopener noreferrer"&gt;Multiple delivery modes&lt;/a&gt; : Email, SMS, Email+SMS, WhatsApp &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/documents/send-reminder" rel="noopener noreferrer"&gt;Reminders endpoint&lt;/a&gt; for follow-ups &lt;/li&gt;
&lt;li&gt;  Ability to &lt;a href="https://developers.boldsign.com/how-to-guides/disable-email-notifications" rel="noopener noreferrer"&gt;disable platform notifications&lt;/a&gt;  when you want full in-app control &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/embedded-signing/get-embedded-signing-link" rel="noopener noreferrer"&gt;Embedded signing&lt;/a&gt; support to bypass deliverability entirely &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Recover stuck signers by calling the reminders endpoint POST /v1/document/remind?documentId={documentId}.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/documents/send-reminder/" rel="noopener noreferrer"&gt;Send Reminder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If a signer who didn’t receive the message stops the entire workflow, you need repair paths like resend + update contact info.&lt;/p&gt;

&lt;h2&gt;
  
  
  What compliance gaps create “we can’t prove it” disputes
&lt;/h2&gt;

&lt;p&gt;Compliance isn’t just storing the signed PDF.&lt;/p&gt;

&lt;p&gt;Teams get stuck when they can’t answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Who signed&lt;/li&gt;
&lt;li&gt;  When they signed&lt;/li&gt;
&lt;li&gt;  What events occurred&lt;/li&gt;
&lt;li&gt;  What was presented at signing time&lt;/li&gt;
&lt;li&gt;  What evidence exists if a signature is challenged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Decide what to retain upfront (PDF + event evidence)&lt;/li&gt;
&lt;li&gt;  Automatically fetch evidence when documents complete&lt;/li&gt;
&lt;li&gt;  Implement retention rules aligned with your industry&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/documents/download-audit-trail" rel="noopener noreferrer"&gt;Audit trail download via API&lt;/a&gt;    &lt;/li&gt;
&lt;li&gt;  Guidance for retrieving &lt;a href="https://developers.boldsign.com/how-to-guides/retrieve-esignature-document-history" rel="noopener noreferrer"&gt;document history/evidence&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;  Option to &lt;a href="https://developers.boldsign.com/how-to-guides/combine-audit-trail-and-signed-document-API" rel="noopener noreferrer"&gt;combine signed document + audit trail&lt;/a&gt; into a single package (when enabled) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Automatically store event evidence by downloading the audit log using GET /v1/document/downloadAuditLog?documentId={id}.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/documents/download-audit-trail/" rel="noopener noreferrer"&gt;Download Audit Trail&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If you cannot prove who signed, when they signed, and what happened, you need automated audit trail storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do rate limits and retries create duplicate signature requests
&lt;/h2&gt;

&lt;p&gt;Rate limits don’t hurt because they exist.&lt;/p&gt;

&lt;p&gt;They hurt because apps respond badly to them.&lt;/p&gt;

&lt;p&gt;What goes wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Aggressive retries cause storms&lt;/li&gt;
&lt;li&gt;  Timeouts trigger “create again” logic (duplicates)&lt;/li&gt;
&lt;li&gt;  Teams retry 4xx validation errors without fixing requests&lt;/li&gt;
&lt;li&gt;  Sandbox limits differ from production, so load tests lie&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What reliable teams do instead&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Throttle bursts before they hit the API&lt;/li&gt;
&lt;li&gt;  Retry only transient failures (timeouts, network errors, 5xx, 429)&lt;/li&gt;
&lt;li&gt;  Don’t retry 4xx unless the request changes&lt;/li&gt;
&lt;li&gt;  Add “create safety”: track your own request IDs to prevent duplicates&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/api-overview/rate-limit" rel="noopener noreferrer"&gt;Published rate limits&lt;/a&gt; (sandbox vs production) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/how-to-guides/managing-boldsign-api-rate-limits" rel="noopener noreferrer"&gt;Practical guidance&lt;/a&gt; to design within limits  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.boldsign.com/api-overview/getting-started" rel="noopener noreferrer"&gt;Sandbox&lt;/a&gt; environment for safer testing &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Action:&lt;/strong&gt; Implement client-side throttling using BoldSign published limit of &lt;em&gt;2000 requests/hour&lt;/em&gt; to avoid 429 errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://developers.boldsign.com/api-overview/rate-limit/" rel="noopener noreferrer"&gt;Rate Limit Documentation&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint:&lt;/strong&gt; If a timeout can create two signature requests, you need idempotent “create” logic in your app. &lt;/p&gt;

&lt;h2&gt;
  
  
  What are the 7 Signature API challenges you should design for first
&lt;/h2&gt;

&lt;p&gt;If you only remember one thing, remember this list: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Auth expiry + refresh safety&lt;/li&gt;
&lt;li&gt; PDF placement stability&lt;/li&gt;
&lt;li&gt; Webhook reliability + idempotency&lt;/li&gt;
&lt;li&gt; Template version safety&lt;/li&gt;
&lt;li&gt; Deliverability + repair paths&lt;/li&gt;
&lt;li&gt; Audit trail evidence storage&lt;/li&gt;
&lt;li&gt; Rate limits + retry discipline&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are the points where “it works in testing” becomes “it breaks in production.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What production-readiness checks should every eSignature integration pass
&lt;/h2&gt;

&lt;p&gt;A production-ready eSignature workflow must be resilient across authentication, documents, webhooks, templates, notifications, compliance, and rate limits. The checklist below lets engineering teams verify at a glance, whether their integration can withstand realworld traffic, real documents, and real signer behavior.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Category&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What You Must Validate Before Going Live&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Ready for Production When…&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Authentication Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Token refresh happens &lt;em&gt;before&lt;/em&gt; expiration&lt;br&gt;• Only one service instance handles refresh&lt;br&gt;• Sandbox &amp;amp; production keys are isolated&lt;br&gt;• Clock skew is accounted for&lt;br&gt;• API key vs OAuth2 chosen intentionally&lt;/td&gt;
&lt;td&gt;Your system never generates multiple refreshes and avoids intermittent 401s.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF Rendering &amp;amp; Field Placement Stability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• No brittle hard-coded coordinates&lt;br&gt;• Text-tags anchor fields reliably&lt;br&gt;• Tested across mixed PDF generators (Word, Google Docs, scanned, rotated)&lt;br&gt;• Final signed PDF matches expected placement&lt;br&gt;• Template edits don’t cause movement&lt;/td&gt;
&lt;td&gt;A small document or template change cannot shift or break field positions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Webhook Reliability &amp;amp; Duplicate Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• HMAC SHA256 verification is enforced&lt;br&gt;• Handlers acknowledge fast and process async&lt;br&gt;• Duplicate events do nothing (idempotent)&lt;br&gt;• Out-of-order events can’t revert state&lt;br&gt;• Deployments don’t drop events&lt;/td&gt;
&lt;td&gt;A webhook delivered twice behaves exactly like one delivery.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template Version Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Templates use explicit versioning&lt;br&gt;• No silent edits to live templates&lt;br&gt;• Template readiness checked before use&lt;br&gt;• Roles align with your signer types&lt;br&gt;• System records which template version was used&lt;/td&gt;
&lt;td&gt;Template changes cannot break automation or field mapping.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deliverability &amp;amp; Recovery Paths&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Email, SMS, WhatsApp delivery tracked&lt;br&gt;• Contacts can be fixed mid-process&lt;br&gt;• Resend and follow-up flows implemented&lt;br&gt;• Embedded signing available as fallback&lt;br&gt;• “Sent” and “Delivered” treated separately&lt;/td&gt;
&lt;td&gt;A signer who didn’t receive the message cannot stall the workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance Evidence Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Signed PDFs stored securely&lt;br&gt;• Audit trails auto-downloaded&lt;br&gt;• Retention rules match your industry&lt;br&gt;• Evidence ties to exact document version&lt;br&gt;• Full event history is retrievable any time&lt;/td&gt;
&lt;td&gt;You can prove who signed, when, and what happened without gaps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rate Limits, Retries &amp;amp; Idempotency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;• Retries only for transient failures (429/5xx/timeouts)&lt;br&gt;• 4xx never retried without fixing request&lt;br&gt;• Client-side throttling implemented&lt;br&gt;• Request IDs prevent duplicate creations&lt;br&gt;• Sandbox vs production limits tested&lt;/td&gt;
&lt;td&gt;A timeout can never create duplicate documents or retry storms.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Final Takeaway: What should you take away before you ship a Signature API integration?
&lt;/h2&gt;

&lt;p&gt;Signature APIs don’t usually fail because the provider is unreliable. They fail because production systems expose the weak spots: expired auth, fragile PDF placement, webhook duplicates, template drift, deliverability gaps, missing audit evidence, and retry storms. If you design for these seven failure points up front, you don’t just “integrate eSignatures”. You build a workflow that stays stable under real load, real documents, and real recipients.&lt;/p&gt;

&lt;p&gt;For detailed implementation guidance, refer to the &lt;a href="https://developers.boldsign.com/api-overview/getting-started" rel="noopener noreferrer"&gt;BoldSign API documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Start your free 30‑day &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 trial&lt;/a&gt; today. If you need support aligning these best practices with your workflow, you can reach out through the &lt;a href="https://support.boldsign.com/id/login?ReturnUrl=%2Fid%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3D14da53e04d2dad770eccf8471c640eee%26scope%3Dopenid%2520profile%2520customer.ai.integration.api%26response_type%3Dcode%26redirect_uri%3Dhttps%253A%252F%252Fsupport.boldsign.com%252Fcallback%26state%3DCfDJ8NnO5A_-DupNmQo1SWjxkiaWDrlN-BJtvbSLt-1KOIPnYim1o6gKyYj5o7GfUhxG8BhF5fo8bWcG_PnssU75DkGpTVgu0cIRrufpjWTzoZy8B86jDkDlUIe2IgFkMI7SXbXagYzdo2roe3hiaELEP-_fs1Ux4asSaO-jEbmIAhMhXfHSN8yTYL59Wpx4NK30rxxCcahFfSKhUGCptXrKdN5-OwO72fSbPUUNCF_cN3saeNAHWhW25YNGXRq0akoWMArKdK7GYY8AP2rPfi0JhRqgnViu1bpaNmAXLLNx7x_Z&amp;amp;locale=en-US" rel="noopener noreferrer"&gt;support portal&lt;/a&gt; or 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; with our team.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/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/move-users-between-teams-api" rel="noopener noreferrer"&gt;Move Users to Another Team with the BoldSign ChangeTeam API&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>api</category>
      <category>boldsign</category>
      <category>saas</category>
    </item>
    <item>
      <title>How Claude and OpenAI Are Redefining AI for Healthcare and eSignature Workflows</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Mon, 23 Mar 2026 06:17:15 +0000</pubDate>
      <link>https://forem.com/boldsign/how-claude-and-openai-are-redefining-ai-for-healthcare-and-esignature-workflows-3ij9</link>
      <guid>https://forem.com/boldsign/how-claude-and-openai-are-redefining-ai-for-healthcare-and-esignature-workflows-3ij9</guid>
      <description>&lt;p&gt;Healthcare doesn’t have diagnosis problem as much as it has workflow problem.&lt;/p&gt;

&lt;p&gt;Clinicians and staff lose hours to administrative tasks: prior authorizations, claims and appeals, care coordination, intake and consent, document retrieval, and reporting. That’s why two of the biggest AI announcements in early 2026, Claude for Healthcare and OpenAI for Healthcare, read less like “AI replaces doctors” and more like “AI helps healthcare teams move faster without compromising privacy.”&lt;/p&gt;

&lt;p&gt;And it’s also why eSignature is becoming a core part of the healthcare AI stack.&lt;/p&gt;

&lt;p&gt;At BoldSign, we see this shift clearly: when AI helps people find, draft, and route documents faster, the bottleneck quickly becomes the last mile, getting the right forms signed, stored, searchable, and audit-ready. That’s exactly where a &lt;a href="https://boldsign.com/hipaa-overview?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;HIPAA-compliant eSignature platform&lt;/a&gt; with AI-powered document capabilities earns its place.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude optimizes healthcare: Access, context, time 
&lt;/h2&gt;

&lt;p&gt;Anthropic’s healthcare announcement emphasizes HIPAA-ready infrastructure and connectors that help clinicians and administrators retrieve and understand information across healthcare systems faster.&lt;/p&gt;

&lt;p&gt;Two themes stand out: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Information retrieval across systems&lt;/strong&gt;: The connector approach is aimed at reducing the friction of searching multiple platforms and compiling reports. (&lt;a href="https://www.anthropic.com/news/healthcare-life-sciences" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Workflow acceleration, not medical decision-making&lt;/strong&gt;: The language focuses on tasks that slow teams down, such as coordination, documentation, and admin workflows, rather than diagnosing patients. (&lt;a href="https://claude.com/solutions/healthcare" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The “so what?” for healthcare ops leaders: AI is moving closer to the systems where work happens, including EHR-adjacent tools, registries, policy libraries, clinical-trial ecosystems, while trying to keep compliance front-and-center.&lt;/p&gt;

&lt;h2&gt;
  
  
  How OpenAI for healthcare improves high-quality operations 
&lt;/h2&gt;

&lt;p&gt;OpenAI’s announcement frames OpenAI for Healthcare as a suite designed to help organizations deliver more consistent, high-quality care while supporting HIPAA compliance requirements. (&lt;a href="https://openai.com/index/openai-for-healthcare/" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;That wording matters. In practice, it signals: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Healthcare-specific packaging (not “generic chat for everything”)&lt;/li&gt;
&lt;li&gt;  Enterprise compliance posture designed for regulated environments&lt;/li&gt;
&lt;li&gt;  Operational use cases where speed and consistency matter (documentation, communications, administrative workflows)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s the same pattern: AI as a workflow engine, helping teams standardize and accelerate the non-clinical work that impacts patient experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The missing link in AI for healthcare: Document execution 
&lt;/h2&gt;

&lt;p&gt;AI can draft the intake form. AI can summarize a coverage policy. AI can help staff find the right template.&lt;/p&gt;

&lt;p&gt;But healthcare still runs on documents that must be signed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Patient consent (treatment, procedures, telehealth, HIPAA acknowledgements) &lt;/li&gt;
&lt;li&gt;  Intake packets and insurance authorizations &lt;/li&gt;
&lt;li&gt;  Release of information (ROI) forms &lt;/li&gt;
&lt;li&gt;  Financial responsibility and payment agreements &lt;/li&gt;
&lt;li&gt;  Clinical trial and research consent &lt;/li&gt;
&lt;li&gt;  Vendor BAAs, HR onboarding, compliance attestations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the signature workflow is slow, or worse, non-compliant, AI-generated efficiency gains get stuck at the finish line.&lt;/p&gt;

&lt;p&gt;This is exactly where BoldSign fits into the new healthcare AI landscape.&lt;/p&gt;

&lt;p&gt;BoldSign’s view: AI accelerates document creation and discovery, and BoldSign completes the workflow securely &lt;/p&gt;

&lt;p&gt;BoldSign is built for organizations that need signing workflows that are fast, auditable, and scalable. For healthcare teams, the bar is higher: documents frequently contain PHI, access must be controlled, and auditability is non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) HIPAA compliance isn’t a checkbox; it’s operational readiness&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;BoldSign provides a HIPAA compliance path designed for &lt;a href="https://boldsign.com/solutions/electronic-signature-for-healthcare-solutions?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;healthcare&lt;/a&gt; workflows, including support for being treated as a Business Associate and enabling HIPAA mode via a Business Associate Agreement (BAA).&lt;/p&gt;

&lt;p&gt;BoldSign also publishes practical guidance on &lt;a href="https://boldsign.com/blogs/hipaa-compliant-electronic-signature?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;HIPAA-compliant eSignatures&lt;/a&gt;, helping teams understand what “compliant” means in real signing scenarios (not just marketing claims).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) AI features that reduce document friction (before you even hit “Send”)&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Healthcare is document-heavy, and most delays are caused by “small” things: finding the right form, preparing fields, tracking status, and locating the final signed PDF later. &lt;/p&gt;

&lt;p&gt;BoldSign has been investing in AI features aimed directly at those pain points: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;AI Search for documents and templates&lt;/strong&gt;: &lt;a href="https://boldsign.com/blogs/ai-document-search-in-boldsign?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;Search using natural language&lt;/a&gt; to find the right agreement or template without perfect recall of titles and filters.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AI Form Field Detection&lt;/strong&gt;: Upload a document and automatically &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;detect and place fields&lt;/a&gt; to speed up preparation, especially useful for intake packets, consent forms, and standardized templates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These capabilities complement the direction Claude and OpenAI are taking: reduce time lost to “finding, formatting, and forwarding.” &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Turning AI assistants into action: BoldSign MCP for eSignature automation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;One of the most interesting developments in workflow automation is bridging AI assistants to real systems safely.&lt;/p&gt;

&lt;p&gt;BoldSign introduced an &lt;a href="https://boldsign.com/blogs/mcp-server-ai-esignature-automation?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=repurposed_blogs" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; (Model Context Protocol) approach that lets AI assistants trigger eSignature actions (e.g., send a document from a template, track status) through the BoldSign API returning structured results for clear confirmations and next steps.&lt;/p&gt;

&lt;p&gt;For healthcare ops, that opens up new automation patterns like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  “Send the patient consent packet for tomorrow’s appointment” &lt;/li&gt;
&lt;li&gt;  “Find all unsigned telehealth consents from last week” &lt;/li&gt;
&lt;li&gt;  “Generate a standard ROI form and route it to the patient + compliance officer”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point isn’t “AI does everything.” It’s AI reduces the clicks, while your signing and compliance system remains the source of truth. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where this is going: healthcare “workflow stacks” will converge around documents&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Claude for Healthcare and OpenAI for Healthcare reinforce a trend: healthcare AI is being productized around repeatable operational workflows with compliance guardrails. (&lt;a href="https://www.anthropic.com/news/healthcare-life-sciences" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;In the near future, healthcare organizations will assemble workflow stacks that look like this: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; AI assistant layer (summarize, draft, retrieve, guide staff) &lt;/li&gt;
&lt;li&gt; Core healthcare systems (EHR, scheduling, billing, registries) &lt;/li&gt;
&lt;li&gt; Document execution layer (prepare fields, route for signature, store, audit, retrieve)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;BoldSign lives in (3) and increasingly helps with (1) via AI Search, AI field detection, and MCP-enabled automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical examples: what “AI + BoldSign” can look like in healthcare workflows 
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Patient intake &amp;amp; consent&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  AI helps staff choose the right packet based on appointment type &lt;/li&gt;
&lt;li&gt;  BoldSign auto-detects fields and routes to patient + guardian + provider &lt;/li&gt;
&lt;li&gt;  Signed documents become searchable instantly via &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" rel="noopener noreferrer"&gt;AI Search&lt;/a&gt; for fast follow-up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prior authorizations &amp;amp; administrative documentation&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  AI summarizes payer requirements and drafts the supporting cover sheet &lt;/li&gt;
&lt;li&gt;  BoldSign routes the forms for signatures and keeps a clean audit trail &lt;/li&gt;
&lt;li&gt;  Staff can quickly find “the latest signed version” without digging (&lt;a href="https://claude.com/solutions/healthcare" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Research and life sciences&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  AI accelerates regulatory paperwork preparation and review &lt;/li&gt;
&lt;li&gt;  BoldSign keeps signature workflows standardized for study documents and approvals &lt;/li&gt;
&lt;li&gt;  Teams retrieve the exact signed document version when audits or submissions arise (&lt;a href="https://www.anthropic.com/news/healthcare-life-sciences" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A compliance note worth repeating 
&lt;/h2&gt;

&lt;p&gt;Even when products are designed to support HIPAA compliance, implementation decisions matter: what data flows where, who has access, what gets logged, and what’s retained. &lt;a href="https://support.boldsign.com/kb/article/21902/how-to-enable-hipaa-compliance-in-boldsign" rel="noopener noreferrer"&gt;BoldSign’s HIPAA&lt;/a&gt; mode and BAA process are part of building that operational rigor into document workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The BoldSign takeaway 
&lt;/h2&gt;

&lt;p&gt;Claude for Healthcare and OpenAI for Healthcare are strong signals that AI’s biggest near-term impact in healthcare is workflow acceleration, helping teams handle the administrative reality of modern care at scale.&lt;/p&gt;

&lt;p&gt;BoldSign’s role in that future is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Make signing and document execution fast &lt;/li&gt;
&lt;li&gt;  Keep workflows HIPAA-ready &lt;/li&gt;
&lt;li&gt;  Use AI to reduce document prep and retrieval friction &lt;/li&gt;
&lt;li&gt;  Enable automation that connects AI assistants to real eSignature actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your organization is exploring healthcare AI initiatives, it’s worth asking a simple question:&lt;/p&gt;

&lt;p&gt;“Once AI drafts or finds the document, how quickly can we execute it, securely?”&lt;/p&gt;

&lt;p&gt;That’s the gap BoldSign is built to fill.&lt;/p&gt;

&lt;p&gt;Start your free 30‑day &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;Connect with our &lt;a href="https://support.boldsign.com/support/tickets/create" rel="noopener noreferrer"&gt;support team&lt;/a&gt; for guidance and request 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; to see how BoldSign completes your AI‑powered healthcare eSignature workflows.&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-skill-claude-code-studio-esignature/" rel="noopener noreferrer"&gt;Ship eSignatures Faster with BoldSign Skill for Code Studio and Claude&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/streamline-certification-signatures-in-healthcare-training/" rel="noopener noreferrer"&gt;How BoldSign Streamlines Certification Signatures in Healthcare Training&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/top-5-hipaa-compliant-electronic-signature/" rel="noopener noreferrer"&gt;HIPAA-Compliant eSignature Software for Healthcare: Top 5 Picks in 2026&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>claude</category>
      <category>openai</category>
      <category>boldsign</category>
    </item>
    <item>
      <title>Ship eSignatures Faster with BoldSign Skill for Code Studio and Claude</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Thu, 19 Mar 2026 04:05:58 +0000</pubDate>
      <link>https://forem.com/boldsign/ship-esignatures-faster-with-boldsign-skill-for-code-studio-and-claude-4471</link>
      <guid>https://forem.com/boldsign/ship-esignatures-faster-with-boldsign-skill-for-code-studio-and-claude-4471</guid>
      <description>&lt;h2&gt;
  
  
  What is a Skill (and why does eSignature need one)?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Skill&lt;/strong&gt; is a structured set of reference files you add to your Code Studio workspace and include in the AI context. When you prompt Claude in Code Studio, the model can use those files to generate code that follows the API’s patterns, naming conventions, and best practices. No hallucinated endpoints. No outdated SDKs. &lt;/p&gt;

&lt;p&gt;eSignature APIs are particularly tricky to integrate from scratch. There’s the asynchronous nature of document sending, the webhook choreography for tracking status, HMAC verification, form-field coordinate math, and multi-signer ordering. Without a Skill, Claude might get the broad strokes right but miss the details that break things in production, such as assuming &lt;code&gt;SendDocument&lt;/code&gt; is synchronous or forgetting to verify webhook signatures.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/boldsign/boldsign-esignature-skills" rel="noopener noreferrer"&gt;BoldSign eSignature Skill&lt;/a&gt; encodes all of this knowledge into a package Claude can reference every time you ask for help. Think of it as giving Claude the entire senior developer onboarding guide before it writes a single line of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anatomy of the BoldSign Skill
&lt;/h2&gt;

&lt;p&gt;The Skill ships as a folder containing a root &lt;code&gt;SKILL.md&lt;/code&gt; and a set of reference files organized by stack and workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    BoldSign/
    ├── SKILL.md                          ← Main entry point Claude reads first
    ├── references/
    │   ├── stacks/
    │   │   ├── nodejs.md                   ← Node.js / TypeScript SDK
    │   │   ├── python.md                   ← Python SDK
    │   │   ├── dotnet.md                   ← .NET / C# SDK — our focus today
    │   │   └── php.md                      ← PHP SDK
    │   └── workflows/
    │       ├── embedded-saas.md            ← Embedded send + sign in iframes
    │       └── multi-signer.md             ← Sequential, parallel, bulk signing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The root &lt;code&gt;SKILL.md&lt;/code&gt; covers the universal concepts: authentication models, rate limits, sandbox vs live environments, webhook events, form field types, text tags, and the critical “document sending is asynchronous” warning. It then directs Claude to load the right stack file, in our case, &lt;code&gt;references/stacks/dotnet.md&lt;/code&gt;, based on your request.&lt;/p&gt;

&lt;p&gt;This layered structure means Claude loads only what’s relevant. Asking for a C# webhook handler won’t pull in the Node.js or Python references, keeping the context window lean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the Skill
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;1. Get the Skill folder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/boldsign/boldsign-esignature-skills" rel="noopener noreferrer"&gt;Download or clone the BoldSign&lt;/a&gt; folder containing &lt;code&gt;SKILL.md&lt;/code&gt; and the &lt;code&gt;references/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;*&lt;strong&gt;*2. **Upload to Code studio’s Skill directory&lt;/strong&gt;****&lt;/p&gt;

&lt;p&gt;Place the folder in &lt;code&gt;/.codestudio/skills/&lt;/code&gt;. The Skill is automatically triggered when working on BoldSign or document‑signing related tasks.&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%2Ftismhzzor8vrhxoo1y7p.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%2Ftismhzzor8vrhxoo1y7p.png" alt="Code Studio Dashboard View" width="800" height="427"&gt;&lt;/a&gt;Code Studio Dashboard View&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Select your AI model&lt;/strong&gt;&lt;/p&gt;

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

&lt;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%2Flw4z1qknuxwiac0g9ms0.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%2Flw4z1qknuxwiac0g9ms0.png" alt="AI Model Selection for Code Studio" width="800" height="427"&gt;&lt;/a&gt;AI Model Selection for Code Studio&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Start prompting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just ask AI to integrate eSignature. Once the &lt;code&gt;BoldSign/&lt;/code&gt; folder is added to the AI context, you can prompt normally without any special commands.&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%2Fx8tokm3wgtzq2dxurwre.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%2Fx8tokm3wgtzq2dxurwre.png" alt="Prompt Input for Executing Request" width="800" height="427"&gt;&lt;/a&gt;Prompt Input for Executing Request&lt;/p&gt;

&lt;h2&gt;
  
  
  Popular AI coding agents that support Skill
&lt;/h2&gt;

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

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

&lt;h2&gt;
  
  
  Quickstart: Generate your first eSignature using the Skill
&lt;/h2&gt;

&lt;p&gt;Once the Skill is installed, getting a working eSignature flow is remarkably fast. Here’s a real conversation flow targeting .NET / C#:&lt;/p&gt;

&lt;p&gt;Prompt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    "Send a PDF for signature using BoldSign in .NET C# with API Key authentication.
    Then add a webhook handler for this flow in ASP.NET Core.
    Finally, generate an embedded signing link so signers can sign inside my app instead of through email, with each part implemented independently."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Send a document&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude uses the BoldSign reference files added to context, systematically pulls in &lt;code&gt;references/stacks/dotnet.md&lt;/code&gt;, and generates an implementation-ready example with the NuGet SDK, form field placement, signer configuration, and the critical reminder that sending is async:&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;BoldSign.Api&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;BoldSign.Model&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="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="nf"&gt;SendDocumentAsync&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;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="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"BOLDSIGN_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;OpenRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"contract.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentFile&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;DocumentFileStream&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;ContentType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"application/pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;FileData&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;FileName&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"contract.pdf"&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="c1"&gt;// Define where the signature field appears on the PDF&lt;/span&gt;
        &lt;span class="kt"&gt;var&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="n"&gt;Rectangle&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Width&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Height&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="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="n"&gt;FormField&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;FieldType&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FieldType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;PageNumber&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Bounds&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;IsRequired&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="s"&gt;"John Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;emailAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"john@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;signerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;SignerType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;formFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormField&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;sendRequest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SendForSign&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Title&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Service Agreement"&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 agreement."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Signers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DocumentSigner&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;signer&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="n"&gt;Files&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IDocumentFile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;documentFile&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;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;documentClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sendRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Document ID: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// ⚠️ Async — use webhooks to confirm Sent status&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Add a webhook handler&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude generates an ASP.NET Core controller with raw body reading (required for HMAC), &lt;code&gt;X-BoldSign-Signature&lt;/code&gt; verification, and handlers for &lt;code&gt;Completed&lt;/code&gt;, &lt;code&gt;Declined&lt;/code&gt;, and &lt;code&gt;SendFailed&lt;/code&gt; — including the signed PDF download step that many developers forget:&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"webhooks"&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;BoldSignWebhookController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"boldsign"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;HandleWebhook&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// 1. Read raw body for HMAC verification&lt;/span&gt;
            &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;reader&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;StreamReader&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;Body&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;body&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;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadToEndAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;// 2. Verify HMAC SHA-256 signature&lt;/span&gt;
            &lt;span class="kt"&gt;var&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;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"X-BoldSign-Signature"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;ToString&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;secret&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"BOLDSIGN_WEBHOOK_SECRET"&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;expectedSig&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ComputeHmac&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secret&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;signature&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;expectedSig&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Unauthorized&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;// 3. Parse and route event&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Deserialize&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;JsonElement&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;body&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;eventType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"eventType"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;GetString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;documentId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"documentId"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;GetString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"Completed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;HandleCompleted&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="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"SendFailed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;// Alert ops — don't silently swallow failures&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"Declined"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;// Notify relevant parties&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&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;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;HandleCompleted&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;documentId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Download signed PDF + audit trail&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;pdf&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;DownloadDocument&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteAllBytesAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="s"&gt;$"signed/&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;.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pdf&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;audit&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;DownloadAuditLog&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteAllBytesAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="s"&gt;$"signed/&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;-audit.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ComputeHmac&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;message&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;secret&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;keyBytes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Encoding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTF8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secret&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;msgBytes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Encoding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTF8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetBytes&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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;hmac&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;HMACSHA256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keyBytes&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;hash&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ComputeHash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msgBytes&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;Convert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToHexString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToLower&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;Embed signing in the frontend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude produces the C# backend method that generates a short-lived sign link, ready to be loaded in an &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; on your frontend:&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;GetEmbeddedSignLink&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;documentId&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;signerEmail&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;signLinkExpiry&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddHours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;24&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;result&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;GetEmbeddedSignLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;signerEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="n"&gt;signerEmail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;signLinkValidTill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;signLinkExpiry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;redirectUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="s"&gt;"https://yourapp.com/signing-complete"&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;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SignLink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// load in &amp;lt;iframe&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Supported workflows &amp;amp; prompts
&lt;/h2&gt;

&lt;p&gt;Here’s a quick reference of what you can ask for and which parts of the Skill Claude will use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;What you want&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example prompt&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Skill files used&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic document send&lt;/td&gt;
&lt;td&gt;“Send a PDF for signature using .NET C#”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;dotnet.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template-based send&lt;/td&gt;
&lt;td&gt;“Send from a BoldSign template in C#”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;dotnet.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embedded signing&lt;/td&gt;
&lt;td&gt;“Embed signing in my ASP.NET app via iframe”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;dotnet.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embedded sending&lt;/td&gt;
&lt;td&gt;“Let users prepare and send docs without leaving my app”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;embedded-saas.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-signer / sequential&lt;/td&gt;
&lt;td&gt;“Set up a 3-party NDA with sequential signing in C#”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;multi-signer.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhook setup&lt;/td&gt;
&lt;td&gt;“Add BoldSign webhooks to my ASP.NET Core API”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;dotnet.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download signed PDF&lt;/td&gt;
&lt;td&gt;“Download the completed document and audit trail in C#”&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SKILL.md&lt;/code&gt; + &lt;code&gt;dotnet.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Getting webhooks right
&lt;/h2&gt;

&lt;p&gt;BoldSign’s document operations are asynchronous. The API returns a &lt;code&gt;DocumentId&lt;/code&gt; immediately, but the document isn’t “sent” yet. The Skill makes sure Claude never generates code that treats &lt;code&gt;SendDocument&lt;/code&gt; as synchronous. Instead, it always pairs document sending with a webhook handler.&lt;/p&gt;

&lt;p&gt;The key webhook events you need to handle:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Event&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;When it fires&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What to do&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Sent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Document processing complete&lt;/td&gt;
&lt;td&gt;Update status to “sent” in your DB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SendFailed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Processing failed&lt;/td&gt;
&lt;td&gt;Alert your ops team; do not swallow this&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Signed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One signer completes&lt;/td&gt;
&lt;td&gt;Track progress; for sequential flows, next signer is auto-notified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Completed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All signers done&lt;/td&gt;
&lt;td&gt;Download signed PDF + audit trail → store permanently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Declined&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A signer declined&lt;/td&gt;
&lt;td&gt;Notify relevant parties; the entire doc halts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Expired&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Document passed its expiry date&lt;/td&gt;
&lt;td&gt;Clean up and optionally resend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;BoldSign retries webhook delivery for up to 8 hours if your server is down, so you have a generous buffer. But always respond with a &lt;code&gt;200 OK&lt;/code&gt; quickly, and do heavy processing (like PDF downloads) in a background task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls the Skill prevents
&lt;/h2&gt;

&lt;p&gt;One of the biggest advantages of a Skill over raw LLM code generation is that it encodes hard-won lessons. Here are mistakes the BoldSign Skill prevents Claude from making:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Polling instead of webhooks&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Polling burns through your rate limit (50/hr in sandbox, 2,000/hr in prod). The Skill always generates webhook-based status tracking.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Using JSON for file uploads&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;File uploads must use &lt;code&gt;multipart/form-data&lt;/code&gt;, not &lt;code&gt;application/json&lt;/code&gt;. The .NET SDK handles this via &lt;code&gt;DocumentFileStream&lt;/code&gt;, but the Skill ensures Claude uses it correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Assuming SendDocument is synchronous&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The API returns a &lt;code&gt;DocumentId&lt;/code&gt; immediately, but the document is still processing. The Skill adds a comment warning and webhook handler every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Skipping HMAC verification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Without signature verification, anyone can POST fake events to your webhook endpoint. The Skill never generates a controller without &lt;code&gt;HMACSHA256&lt;/code&gt; validation.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Hardcoding API keys&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By Design, every code sample the Skill produces reads credentials securely via &lt;code&gt;Environment.GetEnvironmentVariable&lt;/code&gt; or &lt;code&gt;appsettings.json&lt;/code&gt;, never inline strings.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Forgetting to set the region base URL&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;EU, AU, and CA accounts require a different base URL. The Skill reminds Claude to configure &lt;code&gt;eu-api.boldsign.com&lt;/code&gt; (or the correct regional endpoint) when the user specifies a non-US region.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced: Embedded send + sign architecture
&lt;/h2&gt;

&lt;p&gt;For apps that want the full white-label experience, where neither the sender nor the signer ever leaves your application, the Skill helps generate an embedded send-and-sign architecture. Here’s the flow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your .NET Application&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Sender prepares document&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/document/createEmbeddedRequest&lt;/code&gt; → Returns &lt;strong&gt;sendUrl&lt;/strong&gt; → Load in : sender drags fields, clicks Send&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Signer signs inside your app&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;GET /v1/document/getEmbeddedSignLink&lt;/code&gt; → Returns &lt;strong&gt;signLink&lt;/strong&gt; → Load in : signer reviews and signs&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Webhook events&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sent → Signed → &lt;strong&gt;Completed&lt;/strong&gt; → DownloadDocument + DownloadAuditLog → store&lt;/p&gt;

&lt;p&gt;The Skill’s &lt;code&gt;embedded-saas.md&lt;/code&gt; and &lt;code&gt;dotnet.md&lt;/code&gt; references give Claude everything it needs to generate: the &lt;code&gt;EmbeddedDocumentRequest&lt;/code&gt; with &lt;code&gt;ShowToolbar&lt;/code&gt;, &lt;code&gt;ShowSaveButton&lt;/code&gt;, and &lt;code&gt;ShowSendButton&lt;/code&gt; configuration; the sign link generation with expiry and redirect URL; and the ASP.NET Core webhook controller that downloads the signed PDF on &lt;code&gt;Completed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip — Template-Based Sending:&lt;/strong&gt; If your documents follow a repeatable structure (contracts, NDAs, offer letters), use BoldSign Templates. Create the template once in the BoldSign web app with pre-placed fields, then send via &lt;code&gt;TemplateClient.SendUsingTemplate&lt;/code&gt;. No coordinate math required. The Skill generates the &lt;code&gt;SendForSignFromTemplate&lt;/code&gt; code with role mapping automatically. &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;With the BoldSign Skill added to Code Studio, you can seamlessly start generating implementation‑ready eSignature workflows directly from prompts. Begin by building and testing a basic document‑send flow in the Sandbox environment, then extend it with webhooks, embedded signing, templates, or multi‑signer workflows as your requirements evolve.&lt;/p&gt;

&lt;p&gt;To get started, 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; and explore the available APIs and SDKs in the &lt;a href="https://developers.boldsign.com/api-overview/getting-started/" rel="noopener noreferrer"&gt;BoldSign Developer Documentation&lt;/a&gt;. Use the Skill alongside &lt;a href="https://www.syncfusion.com/code-studio/" rel="noopener noreferrer"&gt;Code Studio&lt;/a&gt; to iterate quickly on your integration.&lt;/p&gt;

&lt;p&gt;If you need help during setup or testing, visit the &lt;a href="https://support.boldsign.com/id/login?ReturnUrl=%2Fid%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3D14da53e04d2dad770eccf8471c640eee%26scope%3Dopenid%2520profile%2520customer.ai.integration.api%26response_type%3Dcode%26redirect_uri%3Dhttps%253A%252F%252Fsupport.boldsign.com%252Fcallback%26state%3DCfDJ8NnO5A_-DupNmQo1SWjxkib_UiBYVCKxGQBbNd4g5KPcj4OiUsqPO_xdex17PuNz4jm_TIMkB5QhNcldwHHftAUKHCXlwKIPd6hFrCORjb7Y_99nZK2Be5l-Pc0yOuQCiB2F7ZCv8D64g5chXk0di5L2njanE6TvmeKwxp4LgrkH57jLs7_g2tOJ-JIqjd7zfCl5aMgykkcCuuwALz9WqhcJ05H1LrWN0mkjub4xvnOTMlQ-kzQ28Rlr_MoVnzRS6g0XB-myBThUZs79Gv8stx-iv9ZsA62H-HtLBw0hmR-L&amp;amp;locale=en-US" rel="noopener noreferrer"&gt;BoldSign support portal&lt;/a&gt; to connect with the team.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/google-sheets-to-signature-zapier-live-webinar" rel="noopener noreferrer"&gt;Google Sheets to Signature: No-Code Automation with Zapier – Webinar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/integrating-boldsign-esignature-apis-in-asp-net-core-app" rel="noopener noreferrer"&gt;Integrating eSignature Solution into your ASP.NET Core app using BoldSign APIs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/exploring-latest-updates-to-identity-api-endpoints-in-dotnet-8/" rel="noopener noreferrer"&gt;Exploring the Latest Updates to Identity API Endpoints in .NET 8&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>claude</category>
      <category>api</category>
      <category>boldsign</category>
    </item>
    <item>
      <title>E-Signature Retention: How Long Should You Keep Records</title>
      <dc:creator>Vijay Amalan</dc:creator>
      <pubDate>Wed, 18 Mar 2026 06:25:51 +0000</pubDate>
      <link>https://forem.com/boldsign/e-signature-retention-how-long-should-you-keep-records-46aj</link>
      <guid>https://forem.com/boldsign/e-signature-retention-how-long-should-you-keep-records-46aj</guid>
      <description>&lt;p&gt;Picture this: it’s a normal Tuesday, and then “bam” you get an email saying you’ve been selected for an audit. You locate the contract quickly… but then the follow-up question lands: can you prove who signed it, when they signed it, and what exactly they agreed to? And when you think you’re clear, a privacy review asks the opposite: Did you keep that personal data longer than necessary? &lt;/p&gt;

&lt;p&gt;This is the daily balancing act of modern recordkeeping, retaining electronic signatures long enough for legal enforceability but not so long that you violate privacy rules. &lt;/p&gt;

&lt;p&gt;An electronic signature is any electronic method used to indicate a person’s intent to sign or approve a document. Instead of signing with pen and paper, the signer uses a digital process such as typing their name, clicking a button, drawing a signature on screen, or using a secure digital certificate to show agreement to the document’s content. &lt;/p&gt;

&lt;p&gt;In legal terms, an electronic signature is not about the technology itself, but about intent, consent, and attribution. When properly captured and retained, e‑signatures can be legally binding and enforceable, carrying the same legal effect as handwritten signatures in many jurisdictions. &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Signing a contract through an e‑signature platform&lt;/li&gt;
&lt;li&gt;  Clicking to accept terms and conditions online&lt;/li&gt;
&lt;li&gt;  Electronically approving HR forms, invoices, or consent documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The short answer is that there is no single universal retention period. Instead, electronic signatures must be retained for as long as the underlying record is legally required to be kept. This article explains how retention requirements work, what laws say and don’t say, and how organizations can build a compliant retention strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy law vs. State law: Why retention rules can pull in different directions 
&lt;/h2&gt;

&lt;p&gt;Electronic signature retention is shaped by two overlapping legal forces that do not always align neatly:  &lt;/p&gt;

&lt;p&gt;State laws generally address state record‑keeping laws and privacy or data‑protection laws. How long must records be retained to support enforcement, audits, or litigation? These rules often come from statutes of limitation, labor laws, tax regulations, or sector regulators, and they typically push organizations toward longer retention periods to preserve evidentiary value. &lt;/p&gt;

&lt;p&gt;Privacy laws, by contrast, focus on how long personal data should be kept. Most modern privacy frameworks require organizations to retain personal data only for as long as it is necessary for a legitimate legal or business purpose. Once that purpose expires, continued storage can itself become a compliance risk. &lt;/p&gt;

&lt;p&gt;For electronic signatures, this creates a balancing act: organizations must retain signature records long enough to satisfy legal and regulatory obligations, but not longer than justified once those obligations end. A defensible retention policy clearly links the retention period to a legal requirement and defines when and how signature data is securely disposed of afterward. &lt;/p&gt;

&lt;h2&gt;
  
  
  The role of the audit trail in electronic signatures 
&lt;/h2&gt;

&lt;p&gt;An electronic signature is rarely just a visual mark on a document. Its legal strength comes from the audit trail that accompanies it. &lt;/p&gt;

&lt;p&gt;An audit trail typically records key evidence such &lt;strong&gt;as&lt;/strong&gt; who signed, when they signed, how they were authenticated, and whether the document was altered afterward. This metadata is often critical in audits, disputes, or regulatory reviews, where the question is not merely whether a document exists, but whether the signature can be trusted. &lt;/p&gt;

&lt;p&gt;From a retention perspective, the audit trail must be preserved for the same duration as the signed document itself. Retaining only the signed PDF without its supporting audit data can weaken enforceability, while retaining audit data longer than necessary may raise privacy concerns. Well-designed e‑signature retention practices treat the document and its audit trail as a single evidentiary record, governed by the same retention and disposal rules. &lt;/p&gt;

&lt;h2&gt;
  
  
  Electronic signatures and the law: What is actually required 
&lt;/h2&gt;

&lt;p&gt;In the United States and many other jurisdictions, electronic signatures are legally equivalent to handwritten signatures when certain conditions are met. &lt;/p&gt;

&lt;p&gt;Under key laws such as the Electronic Signatures in Global and National Commerce (ESIGN) Act and the Uniform Electronic Transactions Act (UETA): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A contract or signature cannot be denied legal effect simply because it is electronic.&lt;/li&gt;
&lt;li&gt;  If a law requires a record to be retained, an electronic version satisfies that requirement, provided it is accurate, accessible, and reproducible for later reference. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, neither ESIGN nor UETA specifies exact timeframes for retention. Instead, they defer to existing record-keeping requirements, industry regulations, and statutes of limitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core principle: Retain the signature as long as the record
&lt;/h2&gt;

&lt;p&gt;An electronic signature should be retained for the same duration as the document it signs.  This principle is widely accepted by regulators, courts, and records management authorities.  &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  If an employment contract must be kept for 7 years, the e-signature evidence must also be kept for 7 years.&lt;/li&gt;
&lt;li&gt;  If tax records must be retained for audit purposes, the electronic signatures associated with those records must remain accessible during that period.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Destroying the signature data before the document’s retention period ends can undermine enforceability and legal defensibility. &lt;/p&gt;

&lt;h2&gt;
  
  
  Typical retention periods by document type
&lt;/h2&gt;

&lt;p&gt;Although requirements vary by jurisdiction, industry, and organization, the following general guidelines are commonly used:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Commercial contracts&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;Most jurisdictions tie contract retention to statutes of limitation for enforcement. In many U.S. states, the period is 3 to 6 years for written contracts, with some extending to 10 years for real estate or long-term obligations.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Employment and HR records&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;Employment agreements, offer letters, and policy acknowledgements are often retained 5 to 7 years after termination, depending on labor laws and dispute risk. Regulatory bodies emphasize that electronic signatures must remain readable and retrievable throughout this period.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Financial and tax records&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;Tax authorities typically require retention of supporting records for 3 to 7 years. Electronic signatures on invoices, loan documents, or consent forms must be preserved accordingly. &lt;/p&gt;

&lt;h3&gt;
  
  
   &lt;strong&gt;4. Regulated industries&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;Industries such as banking, healthcare, and life sciences may be subject to extended retention requirements, typically 7 to 15 years, with strict rules on integrity, audit trails, and access controls.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What must be retained along with the signature
&lt;/h2&gt;

&lt;p&gt;Keeping a signed PDF alone may not be sufficient. To ensure legal defensibility, best practice is to retain: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The signed electronic document&lt;/li&gt;
&lt;li&gt;  Audit trails (date, time, IP address, authentication method)&lt;/li&gt;
&lt;li&gt;  Signer consent records&lt;/li&gt;
&lt;li&gt;  Tamper-evident certificates or logs, where applicable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both ESIGN and UETA stress that electronic records must be capable of accurate reproduction for later reference, which includes the ability to prove &lt;em&gt;how&lt;/em&gt; the signature was created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Electronic signature retention periods by industry 
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Key rule:&lt;/strong&gt; Electronic signatures must be retained for the same length of time as the underlying record, and in a form that is accurate, accessible, and reproducible throughout the retention period.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Industry&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Common documents signed electronically&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Typical retention period&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Regulatory / Legal basis&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;General Commercial / Corporate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sales contracts, NDAs, vendor agreements&lt;/td&gt;
&lt;td&gt;3–6 years after contract termination&lt;/td&gt;
&lt;td&gt;Statutes of limitation for written contracts; ESIGN/UETA require records to remain accessible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Resources &amp;amp; Employment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Employment contracts, offer letters, policy acknowledgements&lt;/td&gt;
&lt;td&gt;5–7 years after termination&lt;/td&gt;
&lt;td&gt;Labor and employment record‑keeping rules; records must remain readable and reproducible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finance &amp;amp; Banking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Loan agreements, account openings, customer consents&lt;/td&gt;
&lt;td&gt;5–7 years (often longer for active loans)&lt;/td&gt;
&lt;td&gt;Financial regulations and audit requirements; electronic records must be capable of accurate reproduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Insurance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Policies, claim forms, beneficiary designations&lt;/td&gt;
&lt;td&gt;6–10 years after policy expiration or claim closure&lt;/td&gt;
&lt;td&gt;Industry‑specific record retention laws and litigation risk periods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Healthcare &amp;amp; Life Sciences&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Patient consents, clinical trial agreements&lt;/td&gt;
&lt;td&gt;7–15 years (or longer for clinical trials)&lt;/td&gt;
&lt;td&gt;Sector regulations require long‑term integrity, audit trails, and accessibility of electronic records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Government &amp;amp; Public Sector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Licenses, permits, citizen forms&lt;/td&gt;
&lt;td&gt;As defined by official records schedules (often 7–10+ years)&lt;/td&gt;
&lt;td&gt;Public records and archives rules; electronic records must remain trustworthy and inspectable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tax &amp;amp; Accounting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tax filings, invoices, audit confirmations&lt;/td&gt;
&lt;td&gt;3–7 years&lt;/td&gt;
&lt;td&gt;Tax authority audit and compliance requirements; ESIGN allows electronic retention if records are accurate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real Estate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leases, purchase agreements, disclosures&lt;/td&gt;
&lt;td&gt;7–10 years or longer&lt;/td&gt;
&lt;td&gt;Property and contract limitation periods; heightened evidentiary requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Storage and access requirements matter&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Retention is not just about time; it’s also about usability. &lt;/p&gt;

&lt;p&gt;Regulatory guidance consistently requires that electronic records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Remain accessible to authorized parties&lt;/li&gt;
&lt;li&gt;  Are protected against alteration or loss&lt;/li&gt;
&lt;li&gt;  Can be retrieved and reproduced during audits, litigation, or inspections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure to maintain proper access, even if the document technically still exists, can be treated as non-compliance. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data privacy and retention: Finding the balance&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Retention laws must be balanced with data protection principles. Privacy regulations generally require organizations not to retain personal data longer than necessary. &lt;/p&gt;

&lt;p&gt;As a result, many organizations adopt a policy of retaining electronic signatures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  For the full legal or regulatory requirement, and&lt;/li&gt;
&lt;li&gt;  No longer than necessary once that requirement expires&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A defensible retention schedule should clearly define when records are destroyed and why. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best practices for electronic signature retention&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;To manage electronic signature retention effectively: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Align retention periods with record type requirements, not the signature itself. &lt;/li&gt;
&lt;li&gt;  Use e-signature platforms that generate audit trails and tamper-evident records. &lt;/li&gt;
&lt;li&gt;  Integrate e-signature records with your records to manage the mentor document management system. &lt;/li&gt;
&lt;li&gt;  Review retention schedules regularly to reflect legal and regulatory changes. &lt;/li&gt;
&lt;li&gt;  Document your policies and ensure consistent enforcement across departments. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Authoritative records management guidance consistently emphasizes that retention planning should occur before electronic signature adoption, not after.  &lt;/p&gt;

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

&lt;p&gt;There is no single answer to how long electronic signatures should be retained, but the guiding rule is simple: retain them for as long as the signed record itself must be kept. Laws like ESIGN and UETA ensure electronic signatures are valid, but they place the responsibility for retention squarely on organizations. &lt;/p&gt;

&lt;p&gt;By aligning electronic signature retention with legal requirements, industry regulations, and sound records management practices, organizations can protect themselves from legal risk while maintaining compliance and efficiency.  &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/schedule-contract-delivery-boldsign-api" rel="noopener noreferrer"&gt;Schedule Contract Delivery with BoldSign API Integration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/boldsign-scheduling-feature-for-hr-onboarding" rel="noopener noreferrer"&gt;How BoldSign Scheduling Feature eases HR Onboarding Timelines&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://boldsign.com/blogs/advanced-job-scheduling-quartz-net-guide/" rel="noopener noreferrer"&gt;Quartz.NET in Production: Advanced Job Scheduling for High-Traffic .NET APIs&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>records</category>
      <category>boldsign</category>
      <category>documents</category>
    </item>
  </channel>
</rss>
