DEV Community

Cover image for BoldSign Edit Document API: Update Signers, Fields, and Files Without Restarting
Vijay Amalan for BoldSign

Posted on • Originally published at boldsign.com

BoldSign Edit Document API: Update Signers, Fields, and Files Without Restarting

Updating documents mid-workflow usually means recreating them, reassigning fields, and disrupting signers. The BoldSign Edit Document API lets you update signer details, fields, metadata, and even files without restarting the signing process.

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

What problem this solves

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

  • Recreating the document
  • Reapplying all fields manually
  • Re-inviting all signers
  • Losing audit continuity

The BoldSign Edit Document API eliminates all of these problems.

It helps you:

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

How does the BoldSign edit document API work?

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

How does the completed (synchronous) mode work?

If your request does not include files, edits are applied immediately.

Useful for:

  • Metadata updates
  • Signer property updates
  • Adding or removing form fields
  • Label changes
  • Reminder setting modifications

You receive a response with: “status”: “Completed”

How does the queued (asynchronous) mode work?

If your request includes files, BoldSign processes the update in the background.

You receive: “status”: “Queued”

After processing finishes, you receive webhook events:

  • Edited → change successful
  • EditFailed → change unsuccessful, includes failure reason

This makes file replacement safe and traceable.

Why you need document properties before editing?

To update files, signers, or form fields, you must have their corresponding IDs:

  • fileId
  • ignerId
  • formFieldId

These IDs are retrieved from the Document Properties API, which returns the complete document structure, including all editable resources and their IDs.

This is mandatory for safe, targeted updates.

How do partial updates differ from nested updates?

What do partial updates change?

Partial updates allow you to send only the fields you want modified, BoldSign leaves the rest untouched.

Perfect for top level updates such as:

  • Message
  • Labels
  • Reminder settings

How do nested updates work for files, signers & fields?

Nested resources require:

  • EditAction = Add | Update | Remove
  • The resource’s ID (fileId, signerId, formFieldId)

For example:

  • Updating a signer requires signerId
  • Removing a form field requires formFieldId

This prevents overwriting the entire signer or field structure.

What you’ll need before calling the edit document API?

Make sure you have the following ready:

  1. A BoldSign account (sandbox or production).
  2. An API key (or OAuth2 access token) to call BoldSign APIs over HTTPS.
  3. A REST client such as cURL, Postman, or your preferred HTTP library.
  4. documentId – The ID of the document you want to edit.
  5. Property IDs – File IDs, signer IDs, and form field IDs (retrieved via /v1/document/properties).
  6. Basic API Tooling – Ability to make HTTP calls (e.g., cURL, Postman, or any BoldSign SDK).

Authentication headers

Use one of the following:

  • API Key: X-API-KEY:
  • OAuth2: Authorization: Bearer

How do you update signers and metadata without editing files?

Because no files are included, this triggers synchronous mode (Completed).

Below is an example code snippet

cURL

    curl -X PUT 'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID' \
    -H 'Content-Type: application/json' \
    -H 'X-API-KEY: {API-KEY}' \
    -d '{
        "Message": "Please sign this document.",
        "Signers": [
            {
                "EditAction": "Update",
                "Id": "YOUR-SIGNER-ID",
                "AuthenticationType": "EmailOTP",
                "FormFields": [
                    {
                        "EditAction": "Add",
                        "FieldType": "TextBox",
                        "Bounds": {
                            "X": 100,
                            "Y": 100,
                            "Width": 100,
                            "Height": 20
                        },
                        "IsRequired": false,
                        "PageNumber": 1
                    }
                ]
            },
            {
                "EditAction": "Add",
                "Name": "Signer",
                "EmailAddress": "signer@gmail.com",
                "AuthenticationType": "AccessCode",
                "AuthenticationCode": "1234",
                "FormFields": [
                    {
                        "EditAction": "Add",
                        "FieldType": "Signature",
                        "Bounds": {
                            "X": 150,
                            "Y": 150,
                            "Width": 200,
                            "Height": 30
                        },
                        "IsRequired": true,
                        "PageNumber": 1
                    }
                ]
            }
        ],
        "Labels": ["Label1", "Label2"],
        "ReminderSettings": {
            "EnableAutoReminder": true,
            "ReminderDays": 2,
            "ReminderCount": 4
        }
    }'
Enter fullscreen mode Exit fullscreen mode

c#

    var apiClient = new ApiClient("https://api.boldsign.com", "YOUR_API_KEY");
    var documentClient = new DocumentClient(apiClient);
    // --- Form fields for existing signer ---
    var textField = new EditFormField()
    {
        EditAction = EditAction.Add,
        Type = FieldType.TextBox,
        IsRequired = false,
        Bounds = new Rectangle()
        {
            X = 100,
            Y = 100,
            Width = 100,
            Height = 20,
        },
        PageNumber = 1,
    };
    var signerToUpdate = new EditDocumentSigner()
    {
        EditAction = EditAction.Update,
        Id = "YOUR-SIGNER-ID",
        AuthenticationType = AuthenticationType.EmailOTP,
        FormFields = new List<EditFormField>()
        {
            textField
        }
    };
    // --- Form fields for new signer ---
    var signatureField = new EditFormField()
    {
        EditAction = EditAction.Add,
        Type = FieldType.Signature,
        IsRequired = false,
        Bounds = new Rectangle()
        {
            X = 150,
            Y = 150,
            Width = 200,
            Height = 30,
        },
        PageNumber = 1,
    };
    var signerToAdd = new EditDocumentSigner()
    {
        EditAction = EditAction.Add,
        Name = "Signer",
        EmailAddress = "signer@gmail.com",
        AuthenticationType = AuthenticationType.AccessCode,
        AuthenticationCode = "1234",
        FormFields = new List<EditFormField>()
        {
            signatureField
        }
    };
    // --- Signers collection ---
    var documentSigners = new List<EditDocumentSigner>()
    {
        signerToUpdate,
        signerToAdd
    };
    // --- Labels ---
    var labels = new List<string>()
    {
        "Label1",
        "Label2"
    };
    // --- Reminder settings ---
    var reminderSettings = new ReminderSettings()
    {
        EnableAutoReminder = true,
        ReminderCount = 4,
        ReminderDays = 2,
    };
    // --- Final request ---
    var editDocumentRequest = new EditDocumentRequest()
    {
        DocumentId = "YOUR-DOCUMENT-ID",
        Message = "Please sign this document.",
        Signers = documentSigners,
        Labels = labels,
        ReminderSettings = reminderSettings
    };
    var documentEdited = documentClient.EditDocument(editDocumentRequest);
Enter fullscreen mode Exit fullscreen mode

Python

    import boldsign
    configuration = boldsign.Configuration(api_key="YOUR_API_KEY")
    with boldsign.ApiClient(configuration) as api_client:
        document_api = boldsign.DocumentApi(api_client)
        document_id = "YOUR-DOCUMENT-ID"
        signer1 = boldsign.EditDocumentSigner(
            edit_action="Update",
            id="YOUR-SIGNER-ID",
            authentication_type="EmailOTP",
            form_fields=[
                boldsign.EditFormField(
                    edit_action="Add",
                    fieldType="TextBox",
                    is_required=False,
                    bounds=boldsign.Rectangle(x=100, y=100, width=100, height=20),
                    page_number=1
                )
            ]
        )
        signer2 = boldsign.EditDocumentSigner(
            edit_action="Add",
            name="Signer22",
            email_address="signer@gmail.com",
            authentication_type="AccessCode",
            authentication_code="1234",
            form_fields=[
                boldsign.EditFormField(
                    edit_action="Add",
                    type="Signature",
                    is_required=False,
                    bounds=boldsign.Rectangle(x=150, y=150, width=200, height=30),
                    page_number=1
                )
            ]
        )
        edit_request = boldsign.EditDocumentRequest(
            message="Please sign this document.",
            signers=[signer1, signer2],
            labels=["Label1", "Label2"],
            reminder_settings=boldsign.ReminderSettings(
                enable_auto_reminder=True,
                reminder_count=4,
                reminder_days=2
            )
        )
        response = document_api.edit_document(document_id, edit_request)  
Enter fullscreen mode Exit fullscreen mode

PHP

    <?php require_once "vendor/autoload.php";
    use BoldSign\Configuration;
    use BoldSign\Api\DocumentApi;
    use BoldSign\Model\EditDocumentRequest;
    use BoldSign\Model\EditDocumentSigner;
    use BoldSign\Model\EditFormField;
    use BoldSign\Model\Rectangle;
    use BoldSign\Model\ReminderSettings;
    use BoldSign\Model\EditDocumentFile;
    $config = new Configuration();
    $config->setApiKey('YOUR_API_KEY');
    $apiInstance = new DocumentApi($config);
    $document_id = "YOUR-DOCUMENT-ID";
    $formField2 = new EditFormField();
    $formField2->setEditAction("Add");
    $formField2->setFieldType("TextBox");
    $formField2->setIsRequired(false);
    $formField2->setBounds(new Rectangle([100, 100, 100, 20]));
    $formField2->setPageNumber(1);
    $signer1 = new EditDocumentSigner();
    $signer1->setEditAction("Update");
    $signer1->setId("YOUR-SIGNER-ID");
    $signer1->setAuthenticationType("EmailOTP");
    $signer1->setFormFields([$formField2]);
    $formField3 = new EditFormField();
    $formField3->setEditAction("Add");
    $formField3->setFieldType("Signature");
    $formField3->setBounds(new Rectangle([100, 100, 100, 70]));
    $formField3->setPageNumber(1);
    $signer2 = new EditDocumentSigner();
    $signer2->setEditAction("Add");
    $signer2->setName("Signer");
    $signer2->setEmailAddress("signer@gmail.com");
    $signer2->setAuthenticationType("AccessCode");
    $signer2->setAuthenticationCode("1234");
    $signer2->setFormFields([$formField3]);
    $reminderSettings = new ReminderSettings();
    $reminderSettings->setEnableAutoReminder(true);
    $reminderSettings->setReminderCount(4);
    $reminderSettings->setReminderDays(2);
    $edit_document_request = new EditDocumentRequest();
    $edit_document_request->setMessage('Please sign this document.');
    $edit_document_request->setSigners([$signer1, $signer2]);
    $edit_document_request->setLabels(["Label1", "Label2"]);
    $edit_document_request->setReminderSettings($reminderSettings);
    $edit_document_response = $apiInstance->editDocument($document_id, $edit_document_request);
Enter fullscreen mode Exit fullscreen mode

Java

    ApiClient apiClient = Configuration.getDefaultApiClient();
            apiClient.setApiKey("YOUR_API_KEY");
            DocumentApi documentApi = new DocumentApi(apiClient);
            Rectangle bounds = new Rectangle();
            bounds.setX(50f);
            bounds.setY(100f);
            bounds.setWidth(100f);
            bounds.setHeight(60f);
            EditFormField formField = new EditFormField();
            formField.setEditAction(EditFormField.EditActionEnum.ADD);
            formField.setFieldType(EditFormField.FieldTypeEnum.SIGNATURE);
            formField.setPageNumber(1);
            formField.setBounds(bounds);
            EditDocumentSigner signers = new EditDocumentSigner();
            signers.setEmailAddress("signer@gmail.com");
            signers.setName("signername");
            signers.setFormFields(Arrays.asList(formField));
            signers.setEditAction(EditDocumentSigner.EditActionEnum.ADD);
            EditDocumentRequest editDocumentJsonRequest = new EditDocumentRequest();
            editDocumentJsonRequest.setSigners(Arrays.asList(signers));
            editDocumentJsonRequest.setMessage("Updated documents");
            String documentId = "YOUR-DOCUMENT-ID";
            documentApi.editDocument(documentId, editDocumentJsonRequest);
Enter fullscreen mode Exit fullscreen mode

Node js

    import {
        DocumentApi,
        EditDocumentFile,
        EditDocumentRequest,
        EditDocumentSigner,
        EditFormField,
        Rectangle,
        ReminderSettings
    } from "boldsign";
    import * as fs from 'fs';
    const documentApi = new DocumentApi();
    documentApi.setApiKey("YOUR_API_KEY");
    const documentId = "YOUR-DOCUMENT-ID";
    const bounds1 = new Rectangle();
    bounds1.x = 100;
    bounds1.y = 100;
    bounds1.width = 100;
    bounds1.height = 20;
    const formField1 = new EditFormField();
    formField1.editAction = EditFormField.EditActionEnum.Add;
    formField1.fieldType = EditFormField.FieldTypeEnum.TextBox;
    formField1.isRequired = false;
    formField1.bounds = bounds1;
    formField1.pageNumber = 1;
    const signer1 = new EditDocumentSigner();
    signer1.editAction = EditDocumentSigner.EditActionEnum.Update;
    signer1.id = "YOUR-SIGNER-ID";
    signer1.authenticationType = EditDocumentSigner.AuthenticationTypeEnum.EmailOtp;
    signer1.formFields = [formField1];
    const bounds2 = new Rectangle();
    bounds2.x = 150;
    bounds2.y = 150;
    bounds2.width = 200;
    bounds2.height = 30;
    const formField3 = new EditFormField();
    formField3.editAction = EditFormField.EditActionEnum.Add;
    formField3.fieldType = EditFormField.FieldTypeEnum.Signature;
    formField3.isRequired = false;
    formField3.bounds = bounds2;
    formField3.pageNumber = 1;
    const signer2 = new EditDocumentSigner();
    signer2.editAction = EditDocumentSigner.EditActionEnum.Add;
    signer2.name = "Signer";
    signer2.emailAddress = "signer@gmail.com";
    signer2.authenticationType =EditDocumentSigner.AuthenticationTypeEnum.AccessCode;
    signer2.authenticationCode = "1234";
    signer2.formFields = [formField3];
    const reminderSettings = new ReminderSettings();
    reminderSettings.enableAutoReminder = true;
    reminderSettings.reminderCount = 4;
    reminderSettings.reminderDays = 2;
    const editDocumentRequest = new EditDocumentRequest();
    editDocumentRequest.message = "Please review and sign the attached document.";
    editDocumentRequest.signers = [signer1, signer2];
    editDocumentRequest.labels = ["Label1", "Label2"];
    editDocumentRequest.reminderSettings = reminderSettings;
    const editDocumentResponse = await documentApi.editDocument(documentId, editDocumentRequest);
Enter fullscreen mode Exit fullscreen mode

How do you edit files using the edit document API?

Files in the request immediately enable asynchronous processing(Queued).

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

Below is an example code snippet

cURL

    curl -X PUT 'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID' \
    -H 'Content-Type: application/json' \
    -H 'X-API-KEY: {API-KEY}' \
    -d '{
          "files": [
        {
          "editAction": "Add",
          "fileUrl": "YOUR_FILE_URL"
        }
      ]
    }'
Enter fullscreen mode Exit fullscreen mode

c#

    var apiClient = new ApiClient("https://api.boldsign.com", "YOUR_API_KEY");
    var documentClient = new DocumentClient(apiClient);
    // File to edit
    var editDocumentFile = new EditDocumentFile()
    {
        EditAction = EditAction.Add,
        FileUrl = new Uri("YOUR_FILE_URL")
    };
    var filesToEdit = new List<EditDocumentFile>()
    {
        editDocumentFile
    };
    // Final request
    var editDocumentRequest = new EditDocumentRequest()
    {
        DocumentId = "YOUR-DOCUMENT-ID",
        Files = filesToEdit
    };
    var documentEdited = documentClient.EditDocument(editDocumentRequest);
Enter fullscreen mode Exit fullscreen mode

Python

    import boldsign
    configuration = boldsign.Configuration(api_key="YOUR_API_KEY")
    with boldsign.ApiClient(configuration) as api_client:
        document_api = boldsign.DocumentApi(api_client)
        document_id = "YOUR-DOCUMENT-ID"
        document_file = boldsign.EditDocumentFile(
            edit_action="Add",
            file='YOUR_FILE_PATH'
        )
        edit_request = boldsign.EditDocumentRequest(
            files=[document_file]
        )
        response = document_api.edit_document(document_id, edit_request)    
Enter fullscreen mode Exit fullscreen mode

PHP

    <?php require_once "vendor/autoload.php";
    use BoldSign\Configuration;
    use BoldSign\Api\DocumentApi;
    use BoldSign\Model\EditDocumentRequest;
    use BoldSign\Model\EditDocumentFile;
    $config = new Configuration();
    $config->setApiKey('YOUR_API_KEY');
    $apiInstance = new DocumentApi($config);
    $document_id = "YOUR-DOCUMENT-ID";
    $edit_document_request = new EditDocumentRequest();
    $document1 = new EditDocumentFile();
    $document1->setFileUrl("YOUR_FILE_URL");
    $document1->setEditAction('Add');
    $edit_document_request->setFiles([$document1]);
    $edit_document_response = $apiInstance->editDocument($document_id, $edit_document_request);
Enter fullscreen mode Exit fullscreen mode

Java

    ApiClient apiClient = Configuration.getDefaultApiClient();
            apiClient.setApiKey("YOUR_API_KEY");
            DocumentApi documentApi = new DocumentApi(apiClient);
            EditDocumentFile document = new EditDocumentFile();
            document.setEditAction(EditDocumentFile.EditActionEnum.ADD);
            document.setFileUrl( new URI( "YOUR_FILE_URL"));
            EditDocumentRequest editDocumentJsonRequest = new EditDocumentRequest();
            editDocumentJsonRequest.setFiles(Arrays.asList(document));
            String documentId = "YOUR-DOCUMENT-ID";
            documentApi.editDocument(documentId, editDocumentJsonRequest);
Enter fullscreen mode Exit fullscreen mode

Node js

    import {
        DocumentApi,
        EditDocumentFile,
        EditDocumentRequest
    } from "boldsign";
    import * as fs from 'fs';
    const documentApi = new DocumentApi();
    documentApi.setApiKey("YOUR_API_KEY");
    const documentId = "YOUR-DOCUMENT-ID";
    const documentfile = new EditDocumentFile();
    documentfile.file = fs.createReadStream("YOUR_FILE_PATH");
    documentfile.editAction = EditDocumentFile.EditActionEnum.Add;
    const editDocumentRequest = new EditDocumentRequest();
    editDocumentRequest.files = [documentfile];
    const editDocumentResponse = await documentApi.editDocument(documentId, editDocumentRequest);
Enter fullscreen mode Exit fullscreen mode

How do you edit single field to the same signer using the edit document API?

You can update just one property of a signer without resending all their details.

When you update a signer:

  • Only the specific field you send is changed.
  • If you remove a signer, all form fields linked to that signer are automatically removed.

How do you update only the IsRequired property on an existing form field?

cURL

    curl -X PUT 'https://api.boldsign.com/v1-beta/document/edit?documentId=YOUR-DOCUMENT-ID' \
    -H 'Content-Type: application/json' \
    -H 'X-API-KEY: {API-KEY}' \
    -d '{
        "Signers": [
            {
                "EditAction": "Update",
                "Id": "YOUR-SIGNER-ID",
                "FormFields": [
                    {
                        "EditAction": "Update",
                        "Id": "YOUR-FIELD-ID",
                        "IsRequired": false
                    }
                ]
            }
        ]
    }'
Enter fullscreen mode Exit fullscreen mode

c#

    var apiClient = new ApiClient("https://api.boldsign.com", "YOUR_API_KEY");
    var documentClient = new DocumentClient(apiClient);
    var signerToUpdate = new EditDocumentSigner()
    {
        EditAction = EditAction.Update,
        Id = "YOUR-SIGNER-ID",
        AuthenticationCode = "1234"
    };
    // --- Signers collection ---
    var documentSigners = new List<EditDocumentSigner>()
    {
        signerToUpdate
    };
    // --- Final request ---
    var editDocumentRequest = new EditDocumentRequest()
    {
        DocumentId = "YOUR-DOCUMENT-ID",
        Signers = documentSigners
    };
    var documentEdited = documentClient.EditDocument(editDocumentRequest);
Enter fullscreen mode Exit fullscreen mode

Python

    import boldsign
    configuration = boldsign.Configuration(api_key="YOUR_API_KEY")
    with boldsign.ApiClient(configuration) as api_client:
        document_api = boldsign.DocumentApi(api_client)
        document_id = "YOUR-DOCUMENT-ID"
        signer1 = boldsign.EditDocumentSigner(
            edit_action="Update",
            id="YOUR-SIGNER-ID",
            authentication_code="1234"
        )
        edit_request = boldsign.EditDocumentRequest(
            signers=[signer1],
        )
        response = document_api.edit_document(document_id, edit_request)    
Enter fullscreen mode Exit fullscreen mode

PHP

    <?php require_once "vendor/autoload.php";
    use BoldSign\Configuration;
    use BoldSign\Api\DocumentApi;
    use BoldSign\Model\EditDocumentRequest;
    use BoldSign\Model\EditDocumentSigner;
    $config = new Configuration();
    $config->setApiKey('YOUR_API_KEY');
    $apiInstance = new DocumentApi($config);
    $document_id = "YOUR-DOCUMENT-ID";
    $signer1 = new EditDocumentSigner();
    $signer1->setEditAction("Update");
    $signer1->setId("YOUR-SIGNER-ID");
    $signer1->setAuthenticationCode("1234");
    $edit_document_request = new EditDocumentRequest();
    $edit_document_request->setSigners([$signer1]);
    $edit_document_response = $apiInstance->editDocument($document_id, $edit_document_request);
Enter fullscreen mode Exit fullscreen mode

Java

    ApiClient apiClient = Configuration.getDefaultApiClient();
            apiClient.setApiKey("YOUR_API_KEY");
            DocumentApi documentApi = new DocumentApi(apiClient);
            EditDocumentSigner signers = new EditDocumentSigner();
            signers.setAuthenticationCode("1234");
            signers.setId("YOUR-SIGNER-ID");
            signers.setEditAction(EditDocumentSigner.EditActionEnum.UPDATE);
            EditDocumentRequest editDocumentJsonRequest = new EditDocumentRequest();
            editDocumentJsonRequest.setSigners(Arrays.asList(signers));
            String documentId = "YOUR-DOCUMENT-ID";
            documentApi.editDocument(documentId, editDocumentJsonRequest);
Enter fullscreen mode Exit fullscreen mode

Node js

    import {
        DocumentApi,
        EditDocumentRequest,
        EditDocumentSigner,
    } from "boldsign";
    import * as fs from 'fs';
    const documentApi = new DocumentApi();
    documentApi.setApiKey("YOUR_API_KEY");
    const documentId = "YOUR-DOCUMENT-ID";
    const signer1 = new EditDocumentSigner();
    signer1.editAction = EditDocumentSigner.EditActionEnum.Update;
    signer1.id = "YOUR-SIGNER-ID";
    signer1.authenticationCode = "1234";
    const editDocumentRequest = new EditDocumentRequest();
    editDocumentRequest.signers = [signer1];
    const editDocumentResponse = await documentApi.editDocument(documentId, editDocumentRequest); 
Enter fullscreen mode Exit fullscreen mode

You can update just one property of a form field, such as IsRequired, without modifying anything else in the signer or document.

What updates are restricted or not allowed when editing documents?

Some elements are immutable for security and compliance reasons.

Always immutable

You cannot change:

  • documentId
  • Completed signatures
  • Completed signer actions
  • Audit trail entries

Editable only in draft status

These can be changed only when the document is still a draft:

  • Title
  • BrandId
  • EnableSigningOrder
  • ScheduledSendTime

What if the document was created from a template?

When a document is created from a template, certain elements may already be locked based on the template’s settings:

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

What changes are restricted after any signer has already signed?

Once any signer has completed signing, the following changes are restricted:

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

How does the completion and error model work when you edit a document?

  • The Edited event confirms that your update was successfully applied. This is especially helpful for edits that were queued because they involved file changes. Available Webhook Events
  • The EditFailed event indicates the update could not be applied. It also includes error details, which you must fix before retrying the edit.
  • File-related edits run in the background and return Queued, so you won’t know the final result immediately. The Edited or EditFailed event is what confirms whether the update eventually succeeded or failed.

Best practices

What steps should you always follow?

  • Fetch → Edit → Verify
  • Always retrieve IDs using Document Properties
  • Only send the fields you want to modify

Why editing documents matters for API workflows?

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

Conclusion

The Edit Document API is most useful when your documents need updates after they’ve been created or sent, without disrupting the signing process. Whether you’re correcting signer details, adding new fields, updating instructions, or replacing files, the API lets you make precise changes safely and efficiently. By always fetching Document Properties first, using the right IDs, and understanding when edits run in Completed vs. Queued mode, you ensure that updates are applied smoothly and reliably.

In short, use the Edit Document API whenever your workflow requires mid-process adjustments, automation-friendly updates, or flexible document handling, all while keeping signers uninterrupted and your workflow running cleanly end‑to‑end.

If you’d like to explore more about BoldSign capabilities, sign up for a free  BoldSign Sandbox account leave a comment, book a demo, or connect with our support team through the BoldSign support portal.

Related blogs

Note: This blog was originally published at boldsign.com 

Top comments (0)