Simplify Sending Bulk Signature Requests with BoldSign API

Simplify Sending Bulk Signature Requests with BoldSign API

Table of Contents

Sign Docs 3x Faster

Send, sign, and manage documents securely and efficiently.

Summarize the blog post with:

Using the BoldSign API, you can send a single document to multiple recipients in one request. This is useful when the same agreement needs signatures or approvals from several people, such as internal stakeholders, partners, or clients.

In this blog, we’ll show you how to define multiple signers, assign fields for each recipient, and send the document through a single streamlined API call. For additional background, see the official Send document to multiple recipients guide.

Asynchronous document processing

Document sending in BoldSign is asynchronous. The API returns a documentId immediately, while the file may still be processing in the background. To confirm whether the request was successfully delivered, listen for webhook events.

BoldSign sends either a Sent event when the request is successfully sent or a SendFailed event if processing fails. When a failure occurs, inspect the error details, correct the request, and retry. See Available webhook events and Validate and verify webhook events for implementation and security guidance.

Sending a document to multiple recipients

To send a document for signature to multiple recipients, you can structure your API request to include all signers in one go. You can also assign specific form fields to each signer, ensuring that every recipient signs in the required sections of the document.

Here are some code snippets in different programming languages that demonstrate how to send a document with multiple signers:


curl -X 'POST' \
  'https://api.boldsign.com/v1/document/send' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {YOUR_API_KEY}' \
  -H 'Content-Type: multipart/form-data' \
  -F 'Message=' \
  -F 'Signers={
    "name": "Hanky",
    "emailAddress": "[email protected]",
    "signerType": "Signer",
    "formFields": [
      {
        "id": "Signature1",
        "fieldType": "Signature",
        "pageNumber": 1,
        "bounds": {
          "x": 50,
          "y": 50,
          "width": 200,
          "height": 25
        },
        "isRequired": true
      }
    ],
    "locale": "EN"
  }' \
  -F 'Signers={
    "name": "Cilian",
    "emailAddress": "[email protected]",
    "signerType": "Signer",
    "formFields": [
      {
        "id": "Signature2",
        "fieldType": "Signature",
        "pageNumber": 2,
        "bounds": {
          "x": 100,
          "y": 100,
          "width": 200,
          "height": 25
        },
        "isRequired": true
      }
    ],
    "locale": "EN"
  }' \
  -F 'Files=@{YOUR_FILE_PATH}' \
  -F 'Title={DOCUMENT_TITLE}'
    

var apiClient = new ApiClient("https://api.boldsign.com", "YOUR_API_KEY");
var documentClient = new DocumentClient(apiClient);

var documentFilePath = new DocumentFilePath
{
    ContentType = "application/pdf",
    FilePath = "FILE_PATH",
};

var filesToUpload = new List<IDocumentFile> { documentFilePath };

var signatureField = new FormField(
    id: "Signature1",
    isRequired: true,
    type: FieldType.Signature,
    pageNumber: 1,
    bounds: new Rectangle(x: 50, y: 50, width: 200, height: 25));

var signatureField1 = new FormField(
    id: "Signature2",
    isRequired: true,
    type: FieldType.Signature,
    pageNumber: 2,
    bounds: new Rectangle(x: 100, y: 100, width: 200, height: 25));

var signer = new DocumentSigner(
    signerName: "Hanky",
    signerType: SignerType.Signer,
    signerEmail: "[email protected]",
    formFields: new List<FormField> { signatureField },
    locale: Locales.EN);

var signer1 = new DocumentSigner(
    signerName: "Cilian",
    signerType: SignerType.Signer,
    signerEmail: "[email protected]",
    formFields: new List<FormField> { signatureField1 },
    locale: Locales.EN);

var sendForSign = new SendForSign
{
    Title = "DOCUMENT_TITLE",
    Signers = new List<DocumentSigner> { signer, signer1 },
    Files = filesToUpload,
};

var documentCreated = documentClient.SendDocument(sendForSign);
    

import boldsign

configuration = boldsign.Configuration(api_key="YOUR_API_KEY")

with boldsign.ApiClient(configuration) as api_client:
    api = boldsign.DocumentApi(api_client)

    field1 = boldsign.FormField(
        id="Signature1",
        fieldType="Signature",
        pageNumber=1,
        bounds=boldsign.Rectangle(x=50, y=50, width=200, height=25),
        isRequired=True
    )

    field2 = boldsign.FormField(
        id="Signature2",
        fieldType="Signature",
        pageNumber=2,
        bounds=boldsign.Rectangle(x=100, y=100, width=200, height=25),
        isRequired=True
    )

    signer1 = boldsign.DocumentSigner(
        name="Hanky",
        emailAddress="[email protected]",
        signerType="Signer",
        formFields=[field1],
        locale="EN"
    )

    signer2 = boldsign.DocumentSigner(
        name="Cilian",
        emailAddress="[email protected]",
        signerType="Signer",
        formFields=[field2],
        locale="EN"
    )

    send = boldsign.SendForSign(
        title="DOCUMENT_TITLE",
        signers=[signer1, signer2],
        files=["FILE_PATH"]
    )

    document_created = api.send_document(send_for_sign=send)
    

import { DocumentApi, DocumentSigner, FormField, Rectangle, SendForSign } from 'boldsign';
import * as fs from 'fs';

async function main() {
  const api = new DocumentApi();
  api.setApiKey('YOUR_API_KEY');

  const rect1 = new Rectangle();
  rect1.x = 50; rect1.y = 50; rect1.width = 200; rect1.height = 25;

  const rect2 = new Rectangle();
  rect2.x = 100; rect2.y = 100; rect2.width = 200; rect2.height = 25;

  const field1 = new FormField();
  field1.id = 'Signature1';
  field1.fieldType = FormField.FieldTypeEnum.Signature;
  field1.pageNumber = 1;
  field1.bounds = rect1;
  field1.isRequired = true;

  const field2 = new FormField();
  field2.id = 'Signature2';
  field2.fieldType = FormField.FieldTypeEnum.Signature;
  field2.pageNumber = 2;
  field2.bounds = rect2;
  field2.isRequired = true;

  const signer1 = new DocumentSigner();
  signer1.name = 'Hanky';
  signer1.emailAddress = '[email protected]';
  signer1.signerType = DocumentSigner.SignerTypeEnum.Signer;
  signer1.formFields = [field1];
  signer1.locale = 'EN';

  const signer2 = new DocumentSigner();
  signer2.name = 'Cilian';
  signer2.emailAddress = '[email protected]';
  signer2.signerType = DocumentSigner.SignerTypeEnum.Signer;
  signer2.formFields = [field2];
  signer2.locale = 'EN';

  const send = new SendForSign();
  send.title = 'DOCUMENT_TITLE';
  send.signers = [signer1, signer2];
  send.files = [fs.createReadStream('FILE_PATH')];

  const documentCreated = await api.sendDocument(send);
}

main();
    

<?php
require_once "vendor/autoload.php";

$config = new BoldSign\Configuration();
$config->setApiKey('YOUR_API_KEY');

$api = new BoldSign\Api\DocumentApi($config);

$bounds1 = new BoldSign\Model\Rectangle();
$bounds1->setX(50);
$bounds1->setY(50);
$bounds1->setWidth(200);
$bounds1->setHeight(25);

$bounds2 = new BoldSign\Model\Rectangle();
$bounds2->setX(100);
$bounds2->setY(100);
$bounds2->setWidth(200);
$bounds2->setHeight(25);

$field1 = new BoldSign\Model\FormField();
$field1->setId("Signature1");
$field1->setFieldType("Signature");
$field1->setPageNumber(1);
$field1->setBounds($bounds1);
$field1->setIsRequired(true);

$field2 = new BoldSign\Model\FormField();
$field2->setId("Signature2");
$field2->setFieldType("Signature");
$field2->setPageNumber(2);
$field2->setBounds($bounds2);
$field2->setIsRequired(true);

$signer1 = new BoldSign\Model\DocumentSigner();
$signer1->setName("Hanky");
$signer1->setEmailAddress("[email protected]");
$signer1->setSignerType("Signer");
$signer1->setFormFields([$field1]);
$signer1->setLocale("EN");

$signer2 = new BoldSign\Model\DocumentSigner();
$signer2->setName("Cilian");
$signer2->setEmailAddress("[email protected]");
$signer2->setSignerType("Signer");
$signer2->setFormFields([$field2]);
$signer2->setLocale("EN");

$send = new BoldSign\Model\SendForSign();
$send->setTitle("DOCUMENT_TITLE");
$send->setSigners([$signer1, $signer2]);
$send->setFiles(["FILE_PATH"]);

$documentCreated = $api->sendDocument($send);
    
ApiClient client = Configuration.getDefaultApiClient();
client.setApiKey("YOUR_API_KEY");

DocumentApi api = new DocumentApi(client);

Rectangle rect1 = new Rectangle();
rect1.setX(50f);
rect1.setY(50f);
rect1.setWidth(200f);
rect1.setHeight(25f);

Rectangle rect2 = new Rectangle();
rect2.setX(100f);
rect2.setY(100f);
rect2.setWidth(200f);
rect2.setHeight(25f);

FormField field1 = new FormField();
field1.setId("Signature1");
field1.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
field1.setPageNumber(1);
field1.setBounds(rect1);
field1.setIsRequired(true);

FormField field2 = new FormField();
field2.setId("Signature2");
field2.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
field2.setPageNumber(2);
field2.setBounds(rect2);
field2.setIsRequired(true);

DocumentSigner signer1 = new DocumentSigner();
signer1.setName("Hanky");
signer1.setEmailAddress("[email protected]");
signer1.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer1.setFormFields(Arrays.asList(field1));
signer1.setLocale(DocumentSigner.LocaleEnum.EN);

DocumentSigner signer2 = new DocumentSigner();
signer2.setName("Cilian");
signer2.setEmailAddress("[email protected]");
signer2.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer2.setFormFields(Arrays.asList(field2));
signer2.setLocale(DocumentSigner.LocaleEnum.EN);

SendForSign send = new SendForSign();
send.setTitle("DOCUMENT_TITLE");
send.setSigners(Arrays.asList(signer1, signer2));
send.setFiles(Arrays.asList(new File("FILE_PATH")));

DocumentCreated documentCreated = api.sendDocument(send);
        

Customizing your request

In the previous examples, replace the placeholders like the API key, signers’ details, file paths, and titles with your specific data to send the document to your recipients. Beyond the minimal fields shown, the same request supports common production needs like signing order, CC recipients, reminders, and branding. These options live alongside your fields, and signers in the request body. For a full list of configurable properties and examples, refer to the Send Document documentation.

Upon calling the API with any of these code snippets, the document will be sent to the specified recipients.

Bulk Send vs. Sending One Document to Multiple Recipients

Sending one document to multiple recipients creates a single signature request where all recipients act on the same shared document. This is best when everyone must review or sign the exact same file.

Bulk Send, by contrast, is designed for sending individualized copies at scale, usually from a template and recipient data source such as CSV. This is better suited for scenarios like onboarding packets, acknowledgments, or mass agreement distribution. 

Conclusion

By utilizing BoldSign’s API, you can send a document to multiple recipients with ease. This approach helps streamline your signing workflow, saving time and minimizing errors. With just a few modifications to the request, you can accommodate multiple signers, ensuring a seamless signing process for your team or clients. You can also simplify multi‑recipient document preparation by generating signing requests directly from templates. Refer to the Send Document From Template guide in the BoldSign documentation.

Start your 30-day BoldSign free trial now to see the advantages of BoldSign. We sincerely appreciate your input, so please feel free to comment below. Book a demo or contact our support team via our support portal if you need any help or would like to learn more about our services.

Like what you see? Share with a friend.

Latest blog posts

Consequential Damages: What They Are and Why They Get Excluded

Consequential Damages: What They Are and Why They Get Excluded

Understand consequential damages, direct vs consequential damages, exclusion clauses, and key examples businesses should know before signing contracts.

How to Avoid Legal Risks in Contracts Before Signing

How to Avoid Legal Risks in Contracts Before Signing

Understand legal risks in contracts caused by unclear terms, signing mistakes, missing protections, and poor records, and learn practical ways to avoid them.

BoldSign Earns 6 G2 Summer 2026 Badges of Excellence

BoldSign Earns 6 G2 Summer 2026 Badges of Excellence

BoldSign earns 6 G2 Summer 2026 badges, including Leader, Momentum Leader, and Canada regional awards, backed by real customer reviews for eSignatures.

Sign up for your free trial today!

  • tick-icon
    30-day free trial
  • tick-icon
    No credit card required
  • tick-icon
    30-day free trial
  • tick-icon
    No credit card required
Sign up for BoldSign free trial