Create conditional fields using API

In BoldSign, the conditional feature is currently available for Checkbox, Radio Button, and Dropdown form fields. By applying conditional logic, you can control the visibility of certain fields, making them appear only when a specific field option is selected. For instance, when a checkbox is checked, a certain form field may be displayed, and when it is unchecked, a different form field may be displayed to the signer.

To create a document with conditional fields using the BoldSign API, follow the code snippets provided below for each type of conditional field.

Radio buttons are a type of form field that allows users to make single selections from a list of options. In this example, we will create conditional fields based on radio button selections.

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 'Signers={
    "name": "David",
    "emailAddress": "[email protected]"",
    "signerOrder": 0,
    "signerType": "Signer",
    "formFields": [
      {
        "id": "Signature1",
        "name": "Signature1",
        "fieldType": "Signature",
        "pageNumber": 1,
        "bounds": {
          "x": 140,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "Initial1",
        "name": "Initial",
        "fieldType": "Initial",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "RadioButton1",
        "name": "RadioButton",
        "fieldType": "RadioButton",
        "groupName": "ConditionalLogic",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 390,
          "width": 20,
          "height": 20
        },
        "value": "off",
        "conditionalRules": [
          {
            "fieldId": "Signature1",
            "isChecked": true
          }
        ],
        "isRequired": false
      },
      {
        "id": "Radiobutton2",
        "name": "RadioButton",
        "fieldType": "RadioButton",
        "groupName": "ConditionalLogic",
        "pageNumber": 1,
        "bounds": {
          "x": 140,
          "y": 590,
          "width": 20,
          "height": 20
        },
        "value": "off",
        "conditionalRules": [
          {
            "fieldId": "Initial1",
            "isChecked": true
          }
        ],
        "isRequired": false
      }
    ],
    "language": 1
  }' \
  -F 'Files=@{Your file path}' \
  -F 'Title={Your 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 = "{Your 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: 100, y: 100, width: 100, height: 50));

var initialField = new FormField(
    id: "initial1",
    isRequired: true,
    type: FieldType.Initial,
    pageNumber: 1,
    bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50));

var radioButton1 = new RadioButtonField(
    id: "Radio1",
    isRequired: true,
    groupName: "Group1",
    pageNumber: 1,
    conditionalRules: new List<ConditionalRule>()
    {
        new ConditionalRule()
        {
            FieldId = "signature1",
            IsChecked = true
        }
    },
    bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20));

var radioButton2 = new RadioButtonField(
    id: "Radio2",
    isRequired: true,
    groupName: "Group1",
    pageNumber: 1,
    conditionalRules: new List<ConditionalRule>()
    {
        new ConditionalRule()
        {
            FieldId = "initial1",
            IsChecked = true
        }
        
    },
    bounds: new Rectangle(x: 100, y: 100, width: 20, height: 20));

var formFieldCollections = new List<FormField>()
{
    signatureField,
    initialField,
    radioButton1,
    radioButton2
};

var signer = new DocumentSigner(
    signerName: "David",
    signerType: SignerType.Signer,
    signerEmail: "[email protected]",
    formFields: formFieldCollections,
    locale: Locales.EN);

var documentSigners = new List<DocumentSigner>()
{
    signer
};

var sendForSign = new SendForSign()
{
    Message = "please sign this",
    Title = "Agreement",
    DisableExpiryAlert = true,
    Signers = documentSigners,
    Files = filesToUpload
};
var documentCreated = documentClient.SendDocument(sendForSign);
import boldsign

configuration = boldsign.Configuration(host = "https://api.boldsign.com", api_key = "YOUR_API_KEY")

with boldsign.ApiClient(configuration) as api_client:

    document_api = boldsign.DocumentApi(api_client)
    
    send_for_sign = boldsign.SendForSign(
        title = "Document SDK API",
        document_title = "SDK Document Test case",
        description = "Testing document from SDK integration test case", 
        files = ["YOUR_FILE_PATH"],
        signers = [
            boldsign.DocumentSigner(
                name = "David",
                emailAddress = "[email protected]",
                signerOrder = 0,
                signerType = "Signer",
                formFields = [
                    boldsign.FormField(
                        id = "Signature",
                        fieldType = "Signature",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = True,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        id = "Initial",
                        fieldType = "Initial",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = True,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        name = "RadioButton1",
                        fieldType = "RadioButton",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = True,
                        value = "off",
                        groupName = "ConditionalLogic",
                        conditionalRules = [
                            boldsign.ConditionalRule(
                                fieldId = "Signature",
                                isChecked = True
                            )
                        ],
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        name = "RadioButton2",
                        fieldType = "RadioButton",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = True,
                        value = "off",
                        groupName = "ConditionalLogic",
                        conditionalRules = [
                            boldsign.ConditionalRule(
                                fieldId = "Initial",
                                isChecked = True
                            )
                        ],
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    )
                ],
                privateMessage = "This is private message for signer"
            )
        ]
    )
    
    document_created = document_api.send_document(send_for_sign)
<?php require_once "vendor/autoload.php";

use BoldSign\Configuration;
use BoldSign\Api\DocumentApi;
use BoldSign\Model\{FormField, Rectangle, ConditionalRule, DocumentSigner, SendForSign, DocumentInfo, FileInfo};

$config = new Configuration();
$config->setHost("https://api.boldsign.com");
$config->setApiKey('YOUR_API_KEY');

$document_api = new DocumentApi($config);

$signature_field = new FormField();
$signature_field->setId('Sign');
$signature_field->setFieldType('Signature');
$signature_field->setPageNumber(1);
$signature_field->setFont('Helvetica');
$signature_field->setIsRequired(true);
$signature_field_bounds = new Rectangle([50, 50, 100, 150]);
$signature_field->setBounds($signature_field_bounds);

$initial_field = new FormField();
$initial_field->setId('Initial');
$initial_field->setFieldType('Initial');
$initial_field->setPageNumber(1);
$initial_field->setFont('Helvetica');
$initial_field->setIsRequired(true);
$initial_field_bounds = new Rectangle([50, 50, 100, 150]);
$initial_field->setBounds($initial_field_bounds);

$radio_child_first = new FormField();
$radio_child_first->setName('RadioButton1');
$radio_child_first->setFieldType('RadioButton');
$radio_child_first->setPageNumber(1);
$radio_child_first->setFont('Helvetica');
$radio_child_first->setIsRequired(true);
$radio_child_first->setValue('off');
$first_child_bounds = new Rectangle([50, 50, 100, 150]);
$radio_child_first->setBounds($first_child_bounds);
$radio_child_first->setGroupName('ConditionalLogic');

$first_child_conditional_rule = new ConditionalRule();
$first_child_conditional_rule->setFieldId('Sign');
$first_child_conditional_rule->setIsChecked(true);
$radio_child_first->setConditionalRules([$first_child_conditional_rule]);

$radio_child_second = new FormField();
$radio_child_second->setName('RadioButton2');
$radio_child_second->setFieldType('RadioButton');
$radio_child_second->setPageNumber(1);
$radio_child_second->setFont('Helvetica');
$radio_child_second->setIsRequired(true);
$radio_child_second->setValue('off');
$second_child_bounds = new Rectangle([50, 50, 100, 150]);
$radio_child_second->setBounds($second_child_bounds);
$radio_child_second->setGroupName('ConditionalLogic');

$second_child_conditional_rule = new ConditionalRule();
$second_child_conditional_rule->setFieldId('Initial');
$second_child_conditional_rule->setIsChecked(true);
$radio_child_second->setConditionalRules([$second_child_conditional_rule]);

$document_signer = new DocumentSigner();
$document_signer->setName('David');
$document_signer->setEmailAddress('[email protected]');
$document_signer->setSignerType('Signer');
$document_signer->setSignerOrder(1);
$document_signer->setFormFields([$signature_field, $initial_field, $radio_child_first, $radio_child_second]);
$document_signer->setPrivateMessage('This is private message for signer');

$send_for_sign = new SendForSign();

$documentInfo = new DocumentInfo();
$documentInfo->setTitle('Document SDK API');
$documentInfo->setDescription('Testing document from SDK integration test case');
$send_for_sign->setDocumentInfo([$documentInfo]);

$files = new FileInfo();
$files = 'YOUR_FILE_PATH';
$send_for_sign->setFiles([$files]);

$send_for_sign->setTitle('SDK Document Test case');
$send_for_sign->setSigners([$document_signer]);

$document_created = $document_api->sendDocument($send_for_sign);
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://api.boldsign.com");
client.setApiKey("YOUR_API_KEY");

DocumentApi documentApi = new DocumentApi(client);

FormField signatureField = new FormField();
signatureField.setId("Sign");
signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
signatureField.setPageNumber(1);
signatureField.setFont(FormField.FontEnum.HELVETICA);
signatureField.setIsRequired(true);
Rectangle signatureFieldBounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
signatureField.setBounds(signatureFieldBounds);

FormField initialField = new FormField();
initialField.setId("Initial");
initialField.setFieldType(FormField.FieldTypeEnum.INITIAL);
initialField.setPageNumber(1);
initialField.setFont(FormField.FontEnum.HELVETICA);
initialField.setIsRequired(true);
Rectangle initialFieldBounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
initialField.setBounds(initialFieldBounds);

FormField radioChildFirst = new FormField();
radioChildFirst.setName("RadioButton1");
radioChildFirst.setFieldType(FormField.FieldTypeEnum.RADIO_BUTTON);
radioChildFirst.setPageNumber(1);
radioChildFirst.setFont(FormField.FontEnum.HELVETICA);
radioChildFirst.setIsRequired(true);
radioChildFirst.setValue("off");
Rectangle firstChildBounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
radioChildFirst.setBounds(firstChildBounds);
radioChildFirst.setGroupName("ConditionalLogic");

ConditionalRule firstChildConditionalRule = new ConditionalRule();
firstChildConditionalRule.setFieldId("Sign");
firstChildConditionalRule.setIsChecked(true);
radioChildFirst.setConditionalRules(Arrays.asList(firstChildConditionalRule));

FormField radioChildSecond = new FormField();
radioChildSecond.setName("RadioButton2");
radioChildSecond.setFieldType(FormField.FieldTypeEnum.RADIO_BUTTON);
radioChildSecond.setPageNumber(1);
radioChildSecond.setFont(FormField.FontEnum.HELVETICA);
radioChildSecond.setIsRequired(true);
radioChildSecond.setValue("off");
Rectangle secondChildBounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
radioChildSecond.setBounds(secondChildBounds);
radioChildSecond.setGroupName("ConditionalLogic");

ConditionalRule secondChildConditionalRule = new ConditionalRule();
secondChildConditionalRule.setFieldId("Initial");
secondChildConditionalRule.setIsChecked(true);
radioChildSecond.setConditionalRules(Arrays.asList(secondChildConditionalRule));

DocumentSigner signer = new DocumentSigner();
signer.setName("David");
signer.setEmailAddress("[email protected]");
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setSignerOrder(1);
ArrayList<FormField> formFields = new ArrayList<FormField>();
formFields.add(radioChildFirst);
formFields.add(radioChildSecond);
formFields.add(signatureField);
formFields.add(initialField);
signer.setFormFields(formFields);

SendForSign sendForSign = new SendForSign();

File file = new File("YOUR_FILE_PATH");  
sendForSign.setFiles(Arrays.asList(file));

sendForSign.setTitle("SDK Document Test case");
sendForSign.setSigners(Arrays.asList(signer));

DocumentCreated documentCreated = documentApi.sendDocument(sendForSign);
import { DocumentApi, DocumentSigner, DocumentInfo, FormField, Rectangle, SendForSign, ConditionalRule } from "boldsign"; 
import * as fs from 'fs';

const documentApi = new DocumentApi("https://api.boldsign.com");
documentApi.setApiKey("YOUR_API_KEY");

const signatureField = new FormField();
signatureField.id = "Sign";
signatureField.fieldType = FormField.FieldTypeEnum.Signature;
signatureField.font = FormField.FontEnum.Helvetica;
signatureField.pageNumber = 1;
signatureField.isRequired = true;
const signatureFieldBounds = { x: 100, y: 50, width: 100, height: 100 } as Rectangle;
signatureField.bounds = signatureFieldBounds;

const initialField = new FormField();
initialField.id = "Initial";
initialField.fieldType = FormField.FieldTypeEnum.Initial;
initialField.font = FormField.FontEnum.Helvetica;
initialField.pageNumber = 1;
initialField.isRequired = true;
const initialFieldBounds = { x: 100, y: 50, width: 100, height: 100 } as Rectangle;
initialField.bounds = initialFieldBounds;

const radioChildFirst = new FormField();
radioChildFirst.name = "RadioButton1";
radioChildFirst.fieldType = FormField.FieldTypeEnum.RadioButton;
radioChildFirst.font = FormField.FontEnum.Helvetica;
radioChildFirst.pageNumber = 1;
radioChildFirst.isRequired = true;
radioChildFirst.value = "off";
const firstChildBounds = { x: 100, y: 50, width: 100, height: 100 } as Rectangle;
radioChildFirst.bounds = firstChildBounds;
radioChildFirst.groupName = "ConditionalLogic";

const firstChildConditionalRule = new ConditionalRule();
firstChildConditionalRule.fieldId = "Sign";
firstChildConditionalRule.isChecked = true;
radioChildFirst.conditionalRules = [firstChildConditionalRule];

const radioChildSecond = new FormField();
radioChildSecond.name = "RadioButton2";
radioChildSecond.fieldType = FormField.FieldTypeEnum.RadioButton;
radioChildSecond.font = FormField.FontEnum.Helvetica;
radioChildSecond.pageNumber = 1;
radioChildSecond.isRequired = true;
radioChildSecond.value = "off";
const secondChildBounds = { x: 100, y: 50, width: 100, height: 100 } as Rectangle;
radioChildSecond.bounds = secondChildBounds;
radioChildSecond.groupName = "ConditionalLogic";

const secondChildConditionalRule = new ConditionalRule();
secondChildConditionalRule.fieldId = "Initial";
secondChildConditionalRule.isChecked = true;
radioChildSecond.conditionalRules = [secondChildConditionalRule];

const documentSigner = new DocumentSigner();
documentSigner.name = "David";
documentSigner.emailAddress = "[email protected]";
documentSigner.signerOrder = 1;
documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer;
documentSigner.formFields = [signatureField, initialField, radioChildFirst, radioChildSecond];
documentSigner.privateMessage = "This is private message for signer";

const files = fs.createReadStream("YOUR_FILE_PATH");

const sendForSign = new SendForSign();

const documentInfo = new DocumentInfo();
documentInfo.title = "SDK Document Test case";
documentInfo.description = "Testing document from SDK integration test case";
sendForSign.documentInfo = [documentInfo];

sendForSign.title = "Document SDK API";
sendForSign.signers = [documentSigner];
sendForSign.files = [files];

const documentCreated = documentApi.sendDocument(sendForSign);

In the above code examples, we first define the document structure, including the signer's information and the form fields. Conditional rules are specified using the conditionalRules property, where you can determine which fields should be visible based on the state of the radio buttons.

For a visual reference, please take a look at the conditional logic applied in the images, as shown below.

When first radio button is selected - Signature field is shown Step 1

When second radio button is selected - Initial field is shown Step 1

Checkboxes allow users to make multiple selections from a list of options. In this example, we will create conditional fields based on checkbox selections.

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 'Signers={
    "name": "David",
    "emailAddress": "[email protected]",
    "signerOrder": 0,
    "signerType": "Signer",
    "formFields": [
      {
        "id": "Signature1",
        "name": "Signature1",
        "fieldType": "Signature",
        "pageNumber": 1,
        "bounds": {
          "x": 140,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "Initial1",
        "name": "Initial",
        "fieldType": "Initial",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "Checkbox1",
        "name": "Checkbox",
        "fieldType": "Checkbox",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 390,
          "width": 20,
          "height": 20
        },
        "value": "off",
        "conditionalRules": [
          {
            "fieldId": "Signature1",
            "isChecked": true
          },
          {
            "fieldId": "Initial1",
            "isChecked": false
          }
        ],
        "isRequired": false
      }
    ],
    "language": 1
  }' \
  -F 'Files=@{Your file path}' \
  -F 'Title={Your 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 = "{Your 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: 100, y: 100, width: 100, height: 50));

var initialField = new FormField(
    id: "initial1",
    isRequired: true,
    type: FieldType.Initial,
    pageNumber: 1,
    bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50));

var checkbox1 = new FormField(
    id: "Checkbox1",
    type: FieldType.CheckBox,
    pageNumber: 1,
    conditionalRules: new List<ConditionalRule>()
    {
        new ConditionalRule()
        {
            FieldId = "signature1",
            IsChecked = true
        },
        new ConditionalRule()
        {
            FieldId = "initial1",
            IsChecked = false
        }
    },
    bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20));

var formFieldCollections = new List<FormField>()
{
    signatureField,
    initialField,
    checkbox1
};

var signer = new DocumentSigner(
    signerName: "David",
    signerType: SignerType.Signer,
    signerEmail: "[email protected]",
    formFields: formFieldCollections,
    locale: Locales.EN);

var documentSigners = new List<DocumentSigner>()
{
    signer
};

var sendForSign = new SendForSign()
{
    Message = "please sign this",
    Title = "Agreement",
    DisableExpiryAlert = true,
    Signers = documentSigners,
    Files = filesToUpload
};
var documentCreated = documentClient.SendDocument(sendForSign);
import boldsign

configuration = boldsign.Configuration(host = "https://api.boldsign.com", api_key = "YOUR_API_KEY")

with boldsign.ApiClient(configuration) as api_client:

    document_api = boldsign.DocumentApi(api_client)
    
    send_for_sign = boldsign.SendForSign(
        title = "Document SDK API",
        document_title = "SDK Document Test case",
        description = "Testing document from SDK integration test case", 
        files = ["YOUR_FILE_PATH"],
        signers = [
            boldsign.DocumentSigner(
                name = "Hanky",
                emailAddress = "[email protected]",
                signerOrder = 0,
                signerType = "Signer",
                formFields = [
                    boldsign.FormField(
                        id = "Signature",
                        fieldType = "Signature",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = False,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        id = "Initial",
                        fieldType = "Initial",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = False,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        id = "CheckBox",
                        fieldType = "CheckBox",
                        font = "Helvetica",
                        pageNumber = 1,
                        value = "off",
                        conditionalRules = [
                            boldsign.ConditionalRule(
                                fieldId = "Signature",
                                isChecked = True
                            ),
                            boldsign.ConditionalRule(
                                fieldId = "Initial",
                                isChecked = False
                            )
                        ],
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    )
                ],
                privateMessage = "This is private message for signer"
            )
        ]
    )
    
    document_created = document_api.send_document(send_for_sign)
<?php require_once "vendor/autoload.php";

use BoldSign\Configuration;
use BoldSign\Api\DocumentApi;
use BoldSign\Model\{FormField, Rectangle, ConditionalRule, DocumentSigner, SendForSign};

$config = new Configuration();
$config->setHost("https://api.boldsign.com");
$config->setApiKey('YOUR_API_KEY');

$document_api = new DocumentApi($config);

$signature_field = new FormField();
$signature_field->setId('Signature1');
$signature_field->setFieldType('Signature');
$signature_field->setPageNumber(1);
$signature_field->setIsRequired(false);
$signature_field_bounds = new Rectangle(['x' => 140, 'y' => 190, 'width' => 82, 'height' => 32]);
$signature_field->setBounds($signature_field_bounds);

$initial_field = new FormField();
$initial_field->setId('Initial1');
$initial_field->setFieldType('Initial');
$initial_field->setPageNumber(1);
$initial_field->setIsRequired(false);
$initial_field_bounds = new Rectangle(['x' => 340, 'y' => 190, 'width' => 82, 'height' => 32]);
$initial_field->setBounds($initial_field_bounds);

$checkbox_field = new FormField();
$checkbox_field->setId('Checkbox1');
$checkbox_field->setFieldType('CheckBox');
$checkbox_field->setPageNumber(1);
$checkbox_field->setValue('off');
$checkbox_bounds = new Rectangle(['x' => 340, 'y' => 390, 'width' => 20, 'height' => 20]);
$checkbox_field->setBounds($checkbox_bounds);

$rule1 = new ConditionalRule();
$rule1->setFieldId('Signature1');
$rule1->setIsChecked(true);

$rule2 = new ConditionalRule();
$rule2->setFieldId('Initial1');
$rule2->setIsChecked(false);

$checkbox_field->setConditionalRules([$rule1, $rule2]);

$document_signer = new DocumentSigner();
$document_signer->setName('David');
$document_signer->setEmailAddress('[email protected]');
$document_signer->setSignerType('Signer');
$document_signer->setSignerOrder(1);
$document_signer->setFormFields([$signature_field, $initial_field, $checkbox_field]);

$send_for_sign = new SendForSign();
$send_for_sign->setTitle('SDK Document Test case');
$send_for_sign->setSigners([$document_signer]);
$send_for_sign->setFiles(['YOUR_FILE_PATH']);

$document_created = $document_api->sendDocument($send_for_sign);
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://api.boldsign.com");
client.setApiKey("YOUR_API_KEY");

DocumentApi documentApi = new DocumentApi(client);

FormField signatureField = new FormField();
signatureField.setId("Signature1");
signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
signatureField.setPageNumber(1);
signatureField.setIsRequired(false);
Rectangle signatureFieldBounds = new Rectangle().x(140f).y(190f).width(82f).height(32f);
signatureField.setBounds(signatureFieldBounds);

FormField initialField = new FormField();
initialField.setId("Initial1");
initialField.setFieldType(FormField.FieldTypeEnum.INITIAL);
initialField.setPageNumber(1);
initialField.setIsRequired(false);
Rectangle initialFieldBounds = new Rectangle().x(340f).y(190f).width(82f).height(32f);
initialField.setBounds(initialFieldBounds);

FormField checkboxField = new FormField();
checkboxField.setId("Checkbox1");
checkboxField.setFieldType(FormField.FieldTypeEnum.CHECK_BOX);
checkboxField.setPageNumber(1);
checkboxField.setValue("off");
Rectangle checkboxBounds = new Rectangle().x(340f).y(390f).width(20f).height(20f);
checkboxField.setBounds(checkboxBounds);

ConditionalRule rule1 = new ConditionalRule();
rule1.setFieldId("Signature1");
rule1.setIsChecked(true);

ConditionalRule rule2 = new ConditionalRule();
rule2.setFieldId("Initial1");
rule2.setIsChecked(false);

checkboxField.setConditionalRules(Arrays.asList(rule1, rule2));

DocumentSigner signer = new DocumentSigner();
signer.setName("David");
signer.setEmailAddress("[email protected]");
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setSignerOrder(1);
ArrayList<FormField> formFields = new ArrayList<FormField>();
formFields.add(signatureField);
formFields.add(initialField);
formFields.add(checkboxField);
signer.setFormFields(formFields);

SendForSign sendForSign = new SendForSign();
File file = new File("YOUR_FILE_PATH");  
sendForSign.setFiles(Arrays.asList(file));
sendForSign.setTitle("SDK Document Test case");
sendForSign.setSigners(Arrays.asList(signer));

DocumentCreated documentCreated = documentApi.sendDocument(sendForSign);
import { DocumentApi, DocumentSigner, DocumentInfo, FormField, Rectangle, SendForSign, ConditionalRule } from "boldsign";
import * as fs from 'fs';

const documentApi = new DocumentApi("https://api.boldsign.com");
documentApi.setApiKey("YOUR_API_KEY");

const signatureField = new FormField();
signatureField.id = "Signature1";
signatureField.fieldType = FormField.FieldTypeEnum.Signature;
signatureField.font = FormField.FontEnum.Helvetica;
signatureField.pageNumber = 1;
signatureField.isRequired = false;
const signatureFieldBounds = { x: 140, y: 190, width: 82, height: 32 } as Rectangle;
signatureField.bounds = signatureFieldBounds;

const initialField = new FormField();
initialField.id = "Initial1";
initialField.fieldType = FormField.FieldTypeEnum.Initial;
initialField.font = FormField.FontEnum.Helvetica;
initialField.pageNumber = 1;
initialField.isRequired = false;
const initialFieldBounds = { x: 340, y: 190, width: 82, height: 32 } as Rectangle;
initialField.bounds = initialFieldBounds;

const checkbox1 = new FormField();
checkbox1.id = "Checkbox1";
checkbox1.fieldType = FormField.FieldTypeEnum.CheckBox;
checkbox1.font = FormField.FontEnum.Helvetica;
checkbox1.pageNumber = 1;
checkbox1.value = "off";
const checkboxBounds = { x: 340, y: 390, width: 20, height: 20 } as Rectangle;
checkbox1.bounds = checkboxBounds;

const rule1 = new ConditionalRule();
rule1.fieldId = "Signature1";
rule1.isChecked = true;

const rule2 = new ConditionalRule();
rule2.fieldId = "Initial1";
rule2.isChecked = false;

checkbox1.conditionalRules = [rule1, rule2];

const documentSigner = new DocumentSigner();
documentSigner.name = "David";
documentSigner.emailAddress = "[email protected]";
documentSigner.signerOrder = 1;
documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer;
documentSigner.formFields = [signatureField, initialField, checkbox1];

const files = fs.createReadStream("YOUR_FILE_PATH");

const sendForSign = new SendForSign();
sendForSign.title = "Document SDK API";
sendForSign.signers = [documentSigner];
sendForSign.files = [files];

const documentCreated = documentApi.sendDocument(sendForSign);

Similar to the radio button example, we define the document structure and use the conditionalRules property to specify which fields should appear based on checkbox selections.

For a visual reference, please take a look at the conditional logic applied in the images, as shown below.

When checkbox is checked - Signature field is shown Step 1

When checkbox is unchecked - Initial field is shown Step 1

Dropdowns provide users with a list of options, allowing them to select a single item. In this example, we will create conditional fields based on dropdown selections.

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 'Signers={
    "name": "David",
    "emailAddress": "[email protected]",
    "signerOrder": 0,
    "signerType": "Signer",
    "formFields": [
      {
        "id": "Signature1",
        "name": "Signature1",
        "fieldType": "Signature",
        "pageNumber": 1,
        "bounds": {
          "x": 140,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "Initial1",
        "name": "Initial",
        "fieldType": "Initial",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 190,
          "width": 82,
          "height": 32
        },
        "isRequired": false
      },
      {
        "id": "Dropdown1",
        "name": "Dropdown",
        "fieldType": "Dropdown",
        "pageNumber": 1,
        "bounds": {
          "x": 340,
          "y": 390,
          "width": 20,
          "height": 20
        },
        "dropdownOptions": [
          "1",
          "2"
        ],
        "value": "1",
        "conditionalRules": [
          {
            "fieldId": "Signature1",
            "value": "1"
          },
          {
            "fieldId": "Initial1",
            "value": "2"
          }
        ],
        "isRequired": false
      }
    ],
    "language": 1
  }' \
  -F 'Files=@{Your file path}' \
  -F 'Title={Your 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 = "{Your 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: 100, y: 100, width: 100, height: 50));

var initialField = new FormField(
    id: "initial1",
    isRequired: true,
    type: FieldType.Initial,
    pageNumber: 1,
    bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50));

var dropdownField = new DropdownField(
    id: "Dropdown11",
    pageNumber: 1,
    dropdownOptions: new List<string>()
    {
        "1",
        "2"
    },
    conditionalRules: new List<ConditionalRule>()
    {
        new ConditionalRule()
        {
            FieldId = "signature1",
            Value = "1"
        },
        new ConditionalRule()
        {
            FieldId = "initial1",
            Value = "2"
        }
    },
    bounds: new Rectangle(x: 50, y: 50, width: 20, height: 20));

var formFieldCollections = new List<FormField>()
{
    signatureField,
    initialField,
    dropdownField
};

var signer = new DocumentSigner(
    signerName: "David",
    signerType: SignerType.Signer,
    signerEmail: "[email protected]",
    formFields: formFieldCollections,
    locale: Locales.EN);

var documentSigners = new List<DocumentSigner>()
{
    signer
};

var sendForSign = new SendForSign()
{
    Message = "please sign this",
    Title = "{Your title}",
    DisableExpiryAlert = true,
    Signers = documentSigners,
    Files = filesToUpload
};
var documentCreated = documentClient.SendDocument(sendForSign);
import boldsign

configuration = boldsign.Configuration(host = "https://api.boldsign.com", api_key = "YOUR_API_KEY")

with boldsign.ApiClient(configuration) as api_client:

    document_api = boldsign.DocumentApi(api_client)
    
    send_for_sign = boldsign.SendForSign(
        title = "Document SDK API",
        document_title = "SDK Document Test case",
        description = "Testing document from SDK integration test case", 
        files = ["YOUR_FILE_PATH"],
        signers = [
            boldsign.DocumentSigner(
                name = "Hanky",
                emailAddress = "[email protected]",
                signerOrder = 0,
                signerType = "Signer",
                formFields = [
                    boldsign.FormField(
                        id = "Signature",
                        fieldType = "Signature",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = False,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        id = "Initial",
                        fieldType = "Initial",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = False,
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    ),
                    boldsign.FormField(
                        id = "DropDown",
                        fieldType = "Dropdown",
                        font = "Helvetica",
                        pageNumber = 1,
                        dropdownOptions = ["1", "2"],
                        conditionalRules = [
                            boldsign.ConditionalRule(
                                fieldId = "Signature",
                                value = "1"
                            ),
                            boldsign.ConditionalRule(
                                fieldId = "Initial",
                                value = "2"
                            )
                        ],
                        bounds = boldsign.Rectangle(x = 50, y = 50, width = 100, height = 150)
                    )
                ],
                privateMessage = "This is private message for signer"
            )
        ]
    )
    
    document_created = document_api.send_document(send_for_sign)
<?php require_once "vendor/autoload.php";

use BoldSign\Configuration;
use BoldSign\Api\DocumentApi;
use BoldSign\Model\{FormField, Rectangle, ConditionalRule, DocumentSigner, SendForSign};

$config = new Configuration();
$config->setHost("https://api.boldsign.com");
$config->setApiKey('YOUR_API_KEY');

$document_api = new DocumentApi($config);

$signature_field = new FormField();
$signature_field->setId('Signature1');
$signature_field->setFieldType('Signature');
$signature_field->setPageNumber(1);
$signature_field->setIsRequired(false);
$signature_field_bounds = new Rectangle(['x' => 140, 'y' => 190, 'width' => 82, 'height' => 32]);
$signature_field->setBounds($signature_field_bounds);

$initial_field = new FormField();
$initial_field->setId('Initial1');
$initial_field->setFieldType('Initial');
$initial_field->setPageNumber(1);
$initial_field->setIsRequired(false);
$initial_field_bounds = new Rectangle(['x' => 340, 'y' => 190, 'width' => 82, 'height' => 32]);
$initial_field->setBounds($initial_field_bounds);

$dropdown_field = new FormField();
$dropdown_field->setId('Dropdown1');
$dropdown_field->setFieldType('Dropdown');
$dropdown_field->setPageNumber(1);
$dropdown_field->setDropdownOptions(['1', '2']);
$dropdown_bounds = new Rectangle(['x' => 340, 'y' => 390, 'width' => 60, 'height' => 20]);
$dropdown_field->setBounds($dropdown_bounds);

$rule1 = new ConditionalRule();
$rule1->setFieldId('Signature1');
$rule1->setValue('1');

$rule2 = new ConditionalRule();
$rule2->setFieldId('Initial1');
$rule2->setValue('2');

$dropdown_field->setConditionalRules([$rule1, $rule2]);

$document_signer = new DocumentSigner();
$document_signer->setName('David');
$document_signer->setEmailAddress('[email protected]');
$document_signer->setSignerType('Signer');
$document_signer->setSignerOrder(1);
$document_signer->setFormFields([$signature_field, $initial_field, $dropdown_field]);

$send_for_sign = new SendForSign();
$send_for_sign->setTitle('{title}');
$send_for_sign->setSigners([$document_signer]);
$send_for_sign->setFiles(['YOUR_FILE_PATH']);

$document_created = $document_api->sendDocument($send_for_sign);
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://api.boldsign.com");
client.setApiKey("YOUR_API_KEY");

DocumentApi documentApi = new DocumentApi(client);

FormField signatureField = new FormField();
signatureField.setId("Signature1");
signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
signatureField.setPageNumber(1);
signatureField.setIsRequired(false);
Rectangle signatureFieldBounds = new Rectangle().x(140f).y(190f).width(82f).height(32f);
signatureField.setBounds(signatureFieldBounds);

FormField initialField = new FormField();
initialField.setId("Initial1");
initialField.setFieldType(FormField.FieldTypeEnum.INITIAL);
initialField.setPageNumber(1);
initialField.setIsRequired(false);
Rectangle initialFieldBounds = new Rectangle().x(340f).y(190f).width(82f).height(32f);
initialField.setBounds(initialFieldBounds);

FormField dropdownField = new FormField();
dropdownField.setId("Dropdown1");
dropdownField.setFieldType(FormField.FieldTypeEnum.DROPDOWN);
dropdownField.setPageNumber(1);
dropdownField.setDropdownOptions(Arrays.asList("1", "2"));
Rectangle dropdownBounds = new Rectangle().x(340f).y(390f).width(20f).height(20f);
dropdownField.setBounds(dropdownBounds);

ConditionalRule rule1 = new ConditionalRule();
rule1.setFieldId("Signature1");
rule1.setValue("1");

ConditionalRule rule2 = new ConditionalRule();
rule2.setFieldId("Initial1");
rule2.setValue("2");

dropdownField.setConditionalRules(Arrays.asList(rule1, rule2));

DocumentSigner signer = new DocumentSigner();
signer.setName("David");
signer.setEmailAddress("[email protected]");
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setSignerOrder(1);
ArrayList<FormField> formFields = new ArrayList<FormField>();
formFields.add(signatureField);
formFields.add(initialField);
formFields.add(dropdownField);
signer.setFormFields(formFields);

SendForSign sendForSign = new SendForSign();
File file = new File("YOUR_FILE_PATH");  
sendForSign.setFiles(Arrays.asList(file));
sendForSign.setTitle("SDK Document Test case");
sendForSign.setSigners(Arrays.asList(signer));

DocumentCreated documentCreated = documentApi.sendDocument(sendForSign);
import { DocumentApi, DocumentSigner, DocumentInfo, FormField, Rectangle, SendForSign, ConditionalRule } from "boldsign";
import * as fs from 'fs';

const documentApi = new DocumentApi("https://api.boldsign.com");
documentApi.setApiKey("YOUR_API_KEY");

const signatureField = new FormField();
signatureField.id = "Signature1";
signatureField.fieldType = FormField.FieldTypeEnum.Signature;
signatureField.font = FormField.FontEnum.Helvetica;
signatureField.pageNumber = 1;
signatureField.isRequired = false;
const signatureFieldBounds = { x: 140, y: 190, width: 82, height: 32 } as Rectangle;
signatureField.bounds = signatureFieldBounds;

const initialField = new FormField();
initialField.id = "Initial1";
initialField.fieldType = FormField.FieldTypeEnum.Initial;
initialField.font = FormField.FontEnum.Helvetica;
initialField.pageNumber = 1;
initialField.isRequired = false;
const initialFieldBounds = { x: 340, y: 190, width: 82, height: 32 } as Rectangle;
initialField.bounds = initialFieldBounds;

const dropdownField = new FormField();
dropdownField.id = "Dropdown1";
dropdownField.fieldType = FormField.FieldTypeEnum.Dropdown;
dropdownField.font = FormField.FontEnum.Helvetica;
dropdownField.pageNumber = 1;
dropdownField.dropdownOptions = ["1", "2"];
const dropdownBounds = { x: 340, y: 390, width: 20, height: 20 } as Rectangle;
dropdownField.bounds = dropdownBounds;

const rule1 = new ConditionalRule();
rule1.fieldId = "Signature1";
rule1.value = "1";

const rule2 = new ConditionalRule();
rule2.fieldId = "Initial1";
rule2.value = "2";

dropdownField.conditionalRules = [rule1, rule2];

const documentSigner = new DocumentSigner();
documentSigner.name = "David";
documentSigner.emailAddress = "[email protected]";
documentSigner.signerOrder = 1;
documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer;
documentSigner.formFields = [signatureField, initialField, dropdownField];

const files = fs.createReadStream("YOUR_FILE_PATH");

const sendForSign = new SendForSign();
sendForSign.title = "Document SDK API";
sendForSign.signers = [documentSigner];
sendForSign.files = [files];

const documentCreated = documentApi.sendDocument(sendForSign);

In the dropdown example, we include a list of options in the dropdownOptions property and use the conditionalRules property to specify which fields should be visible based on the selected dropdown value.

For a visual reference, please take a look at the conditional logic applied in the images, as shown below.

When first value is selected in the dropdown - Signature field is shown Step 1

When second value is selected in the dropdown - Initial field is shown Step 1

By following the provided code snippets and examples, you can create documents with conditional fields using the BoldSign API. Conditional fields enhance the user experience by dynamically displaying relevant form fields based on user interactions. Experiment with different scenarios and conditions to tailor your documents to your specific needs.