How to set signing order using BoldSign template send API?
In the BoldSign API, turning on the signing order option lets you set the order in which signers get the email and sign the document. This helps keep the process organized and clear. This guide will show you how to enable signing order using the BoldSign API.
You can enable signers to sign in a specific order by setting EnableSigningOrder
to true and configuring the SignerOrder
property accordingly.
Here are example codes that can be used to achieve this:
Code Snippet
cURL
curl -X 'POST' \ 'https://api.boldsign.com/v1/template/send?templateId={Your Template ID}' \
-H 'accept: application/json' \
-H 'X-API-KEY: {your API key}' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '
{
"title": "Invitation form",
"message": "Kindly review and sign this.",
"enableSigningOrder": true,
"roles": [
{
"roleIndex": 1,
"signerName": "David",
"signerOrder": 1,
"signerEmail": "david@cubeflakes.com",
"signerType": "Signer",
"signerRole": "Customer",
"formFields": [
{
"id": "SignField1",
"fieldType": "Signature",
"pageNumber": 1,
"bounds": {
"x": 100,
"y": 100,
"width": 100,
"height": 50
},
"isRequired": true
}
],
"locale": "EN"
},
{
"roleIndex": 2,
"signerName": "Richard",
"signerOrder": 2,
"signerEmail": "richard@cubeflakes.com",
"signerType": "Signer",
"signerRole": "CEO",
"formFields": [
{
"id": "SignField",
"fieldType": "Signature",
"pageNumber": 1,
"bounds": {
"x": 100,
"y": 100,
"width": 100,
"height": 50
},
"isRequired": true
}
],
"locale": "EN"
}
]
}`
.NET :
var apiClient = new ApiClient("YOUR_API_KEY");
var templateClient = new TemplateClient(apiClient);
var formFields1 = new List<FormField>
{
new FormField(
id: "signature1",
type: FieldType.Signature,
pageNumber: 1,
bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)),
};
var formFields2 = new List<FormField>
{
new FormField(
id: "signature2",
type: FieldType.Signature,
pageNumber: 1,
bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30)),
};
var sendForSignFromTemplate = new SendForSignFromTemplate
{
Title = "Invitation Form",
TemplateId = "YOUR_TEMPLATE_ID",
Roles =
[
new Roles()
{
RoleIndex = 1,
SignerName = "Richard",
SignerEmail = "richard@cuberflakes.com",
SignerOrder = 1,
SignerRole = "Customer",
SignerType = SignerType.Signer,
FormFields = formFields1,
},
new Roles()
{
RoleIndex = 1,
SignerName = "Alex Gayle",
SignerEmail = "alexgayle@cuberflakes.com",
SignerOrder = 2,
SignerRole = "CEO",
SignerType = SignerType.Signer,
FormFields = formFields2,
}
]
};
sendForSignFromTemplate.EnableSigningOrder = true;
var documentCreated = templateClient.SendUsingTemplate(sendForSignFromTemplate);
Python :
import boldsign
configuration = boldsign.Configuration(api_key="Your_API_Key")
with boldsign.ApiClient(configuration) as api_client:
template_api = boldsign.TemplateApi(api_client)
form_fields = [
boldsign.FormField(
fieldType="Signature",
pageNumber=1,
bounds=boldsign.Rectangle(
x=100,
y=100,
width=100,
height=50
)
),
]
role = [
boldsign.Role(
role_index=1,
signer_name="Richard",
signer_order=1,
signer_email="richard@cuberflakes.com",
private_message="Please check and sign the document.",
authentication_code="281028",
enableEmailOTP=False,
signerType='Signer',
signerRole='Customer',
formFields=form_fields,
locale="EN"
),
boldsign.Role(
role_index=2,
signer_name="Alex Gayle",
signer_order=2,
signer_email="alexgayle@cuberflakes.com",
signerType='Signer',
signerRole='CEO',
formFields=form_fields,
locale="EN"
)
]
template_id = "742ee29c-7b89-4a33-b082-7a3ae0229a24"
send_for_sign_from_template_form = boldsign.SendForSignFromTemplateForm(
title="Invitation form",
message="Kindly review and sign this.",
roles=role,
labels=["Invitation"],
enableSigningOrder=True,
)
response = template_api.send_using_template(template_id, send_for_sign_from_template_form)
print(f"Template sent successfully. Document ID: {response.document_id}")
Java:
ApiClient client = Configuration.getDefaultApiClient();
client.setApiKey("YOUR_API_KEY");
TemplateApi templateApi = new TemplateApi(client);
FormField formField1 = new FormField();
formField1.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
formField1.setPageNumber(1);
Rectangle bounds1 = new Rectangle();
bounds1.setX(100f);
bounds1.setY(50f);
bounds1.setWidth(100f);
bounds1.setHeight(100f);
formField1.setBounds(bounds1);
Role role1 = new Role();
role1.setRoleIndex(50);
role1.setSignerName("Richard");
role1.setSignerEmail("richard@cuberflakes.com");
role1.setSignerOrder(1);
role1.setSignerType(Role.SignerTypeEnum.SIGNER);
role1.setSignerRole("Customer");
role1.setFormFields(Arrays.asList(formField1));
FormField formField2 = new FormField();
formField2.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
formField2.setPageNumber(1);
Rectangle bounds2 = new Rectangle();
bounds2.setX(100f);
bounds2.setY(50f);
bounds2.setWidth(100f);
bounds2.setHeight(100f);
formField2.setBounds(bounds2);
Role role2 = new Role();
role2.setRoleIndex(50);
role2.setSignerName("Alex Gayle");
role2.setSignerEmail("alexgayle@cuberflakes.com");
role2.setSignerOrder(2);
role2.setSignerType(Role.SignerTypeEnum.SIGNER);
role2.setSignerRole("CEO");
role2.setFormFields(Arrays.asList(formField2));
SendForSignFromTemplateForm sendForSignFromTemplate = new SendForSignFromTemplateForm();
sendForSignFromTemplate.setTitle("Invitation form");
sendForSignFromTemplate.setMessage("Kindly review and sign this.");
sendForSignFromTemplate.setRoles(Arrays.asList(role1, role2));
sendForSignFromTemplate.setEnableSigningOrder(true);
DocumentCreated documentCreated = templateApi.sendUsingTemplate("YOUR_TEMPLATE_ID", sendForSignFromTemplate);
PHP :
<?php require_once "vendor/autoload.php";
use BoldSign\Configuration;
use BoldSign\Api\TemplateApi;
use BoldSign\Model\{Role, SendForSignFromTemplateForm};
$config = new Configuration();
$config->setApiKey('YOUR_API_KEY');
$template_api = new BoldSign\Api\TemplateApi($config);
$form_fields1 = new BoldSign\Model\FormField();
$form_fields1->setFieldType('Signature');
$form_fields1->setId('signature');
$form_fields1->setPageNumber(1);
$bounds = new BoldSign\Model\Rectangle([100, 100, 100, 50]);
$form_fields1->setBounds($bounds);
$role1 = new BoldSign\Model\Role();
$role1->setSignerName('Richard');
$role1->setSignerEmail('richard@cuberflakes.com');
$role1->setSignerType("Signer");
$role1->setRoleIndex(1);
$role1->setSignerOrder(1); // Set signer order
$role1->setFormFields([$form_fields]);
$form_fields = new BoldSign\Model\FormField();
$form_fields->setFieldType('Signature');
$form_fields->setId('signature1');
$form_fields->setPageNumber(1);
$bounds = new BoldSign\Model\Rectangle([100, 100, 100, 50]);
$form_fields->setBounds($bounds);
$role2 = new BoldSign\Model\Role();
$role2->setSignerName('Alex');
$role2->setSignerEmail('alexgayle@cuberflakes.com');
$role2->setSignerType("Signer");
$role2->setRoleIndex(2);
$role2->setSignerOrder(2); // Set signer order
$role2->setFormFields([$form_fields1]);
$send_for_sign_from_template = new BoldSign\Model\SendForSignFromTemplateForm();
$send_for_sign_from_template->setRoles([$role1, $role2]);
$send_for_sign_from_template->setTitle('Signer order with multiple recipient');
$send_for_sign_from_template->setEnableSigningOrder(true); // Important to enforce order
$send_using_template_response = $template_api->sendUsingTemplate(
'YOUR_TEMPLATE_ID',
$send_for_sign_from_template
);
echo "Document sent successfully. Document ID: " . $send_using_template_response->getDocumentId();
Node Js:
import { TemplateApi, FormField, Rectangle, Role, SendForSignFromTemplateForm } from "boldsign";
const templateApi = new TemplateApi();
templateApi.setApiKey("YOUR_API_KEY");
var formField1 = new FormField();
formField1.fieldType = FormField.FieldTypeEnum.Signature;
formField1.pageNumber = 1;
const bounds = new Rectangle();
bounds.x = 100;
bounds.y = 50;
bounds.width = 100;
bounds.height = 100;
formField1.bounds = bounds;
var role1 = new Role();
role1.roleIndex = 1;
role1.signerName = "Richard";
role1.signerEmail = "govindharaj.sakthivel+Us5@syncfusion.com";
role1.signerOrder = 1;
role1.signerType = Role.SignerTypeEnum.Signer;
role1.signerRole = "Customer";
role1.formFields = [formField1];
var formField2 = new FormField();
formField2.fieldType = FormField.FieldTypeEnum.Signature;
formField2.pageNumber = 1;
const bounds2 = new Rectangle();
bounds.x = 200;
bounds.y = 50;
bounds.width = 200;
bounds.height = 200;
formField2.bounds = bounds2;
var role2 = new Role();
role2.roleIndex = 2;
role2.signerName = "Richard";
role2.signerEmail = "govindharaj.sakthivel+Us8@syncfusion.com";
role2.signerOrder = 2;
role2.signerType = Role.SignerTypeEnum.Signer;
role2.signerRole = "CEO";
role2.formFields = [formField2];
const sendForSignFromTemplate = new SendForSignFromTemplateForm();
sendForSignFromTemplate.roles = [role1, role2];
sendForSignFromTemplate.enableSigningOrder = true;
sendForSignFromTemplate.title = "Signer Order";
sendForSignFromTemplate.message = "Kindly review and sign this.";
const documentCreated = templateApi.sendUsingTemplate("YOUR_TEMPLATE_ID", sendForSignFromTemplate);
In conclusion, by setting EnableSigningOrder
to true
and configuring the SignerOrder
property accordingly, you can effectively enable signers to sign documents in a predetermined sequence.
After running the code, the document will be created and emailed to the first signer. Once they finish signing, the next signer will receive an email based on the specified order.