How to Add SMS Authentication for Signers

To add SMS authentication to signature requests which verifies the signer with the SMS OTP, you need to include AuthenticationType as SMSOTP. It is also mandatory to add CountryCode and Number for SMS authentication.

To enable SMS verification, you need to include the above parameters to the following endpoints:

  1. v1/document/send
  2. v1/document/createEmbeddedRequestUrl

If you are sending a document using template, you need to include those parameters to the following endpoints:

  1. v1/template/send
  2. v1/template/createEmbeddedRequestUrl

It's important to note that SMS authentication can be added to the document only for paid plans.

To send a document to the signer with SMS authentication, follow these steps:

Use one of the example code snippets below, depending on your preferred programming language.

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": "hanky",
  "emailAddress": "[email protected]",
  "signerType": "Signer",
  "signerRole": "Signer",
  "authenticationType": "SMSOTP",
  "phoneNumber": {
    "countryCode": "{Signer country code}",
    "number": "{Signer phone number}"
  },
  "formFields": [
    {
      "id": "signature",
      "name": "signature",
      "fieldType": "Signature",
      "pageNumber": 1,
      "bounds": {
        "x": 100,
        "y": 100,
        "width": 200,
        "height": 200
      },
      "isRequired": true
}
  ],
  "locale": "EN"
}' \
  -F 'Files=@{your file}' \
  -F 'Title={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: "sign",
    isRequired: true,
    type: FieldType.Signature,
    pageNumber: 1,
    bounds: new Rectangle(x: 100, y: 100, width: 100, height: 50));

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

var signer = new DocumentSigner(
    name: "David",
    emailAddress: "[email protected]",
    authenticationType: AuthenticationType.SMSOTP,
    phoneNumber: new PhoneNumber(
        countryCode: "{Signer country code}",
        number: "{Signer phone number}"),
    formFields: formFieldCollections,
    locale: Locales.EN);

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

var sendForSign = new SendForSign()
{
    Title = "Agreement",
    Signers = documentSigners,
    Files = filesToUpload,
};
var documentCreated = documentClient.SendDocument(sendForSign);
Console.WriteLine(documentCreated.DocumentId);
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_DOCUMENT_PATH"],
        signers = [
            boldsign.DocumentSigner(
                name = "Hanky",
                emailAddress = "[email protected]",
                signerOrder = 1,
                signerType = "Signer",
                authenticationType = "SMSOTP",
                phoneNumber = boldsign.PhoneNumber(
                    countryCode = "{Signer country code}",
                    number = "{Signer phone number}"
                ),
                formFields = [
                    boldsign.FormField(
                        name = "Sign",
                        fieldType = "Signature",
                        font = "Helvetica",
                        pageNumber = 1,
                        isRequired = 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, DocumentSigner, SendForSign, DocumentInfo, FileInfo, PhoneNumber};

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

$document_api = new DocumentApi($config);

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

$document_signer = new DocumentSigner();
$document_signer->setName('Hanky');
$document_signer->setEmailAddress('[email protected]');
$document_signer->setSignerType('Signer');
$document_signer->setSignerOrder(1);
$document_signer->setFormFields([$form_field]);
$document_signer->setPrivateMessage('This is private message for signer');
$document_signer->setAuthenticationType('SMSOTP');

$phone_number = new PhoneNumber();
$phone_number->setCountryCode('{Signer country code}');
$phone_number->setNumber('{Signer phone number}');
$document_signer->setPhoneNumber($phone_number);

$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 formField = new FormField();
formField.setName("Sign");
formField.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
formField.setPageNumber(1);
formField.setFont(FormField.FontEnum.HELVETICA);
formField.setIsRequired(true);
Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
formField.setBounds(bounds);

DocumentSigner signer = new DocumentSigner();
signer.setName("Hanky");
signer.setEmailAddress("[email protected]");
signer.setSignerOrder(1);
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setAuthenticationType(DocumentSigner.AuthenticationTypeEnum.SMSOTP);
PhoneNumber phoneNumber = new PhoneNumber();
phoneNumber.setCountryCode("{Signer country code}");
phoneNumber.setNumber("{Signer phone number}");
signer.setPhoneNumber(phoneNumber);
signer.setFormFields(Arrays.asList(formField));
signer.setPrivateMessage("This is private message for signer");

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, PhoneNumber } from "boldsign"; 
import * as fs from 'fs';

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

const bounds = new Rectangle();
bounds.x = 100;
bounds.y = 50;
bounds.width = 100;
bounds.height = 100;

const formField = new FormField();
formField.name = "Sign";
formField.fieldType = FormField.FieldTypeEnum.Signature;
formField.font = FormField.FontEnum.Helvetica;
formField.pageNumber = 1;
formField.isRequired = true;
formField.bounds = bounds;

const documentSigner = new DocumentSigner();
documentSigner.name = "David";
documentSigner.emailAddress = "[email protected]";
documentSigner.signerOrder = 1;
documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer;
documentSigner.formFields = [formField];
documentSigner.privateMessage = "This is private message for signer";
documentSigner.authenticationType = DocumentSigner.AuthenticationTypeEnum.Smsotp;

const phoneNumber = new PhoneNumber();
phoneNumber.countryCode = "{Signer country code}";
phoneNumber.number = "{Signer phone number}";
documentSigner.phoneNumber = phoneNumber;

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);

Replace the values (Files, Signers, etc.) with the actual values. Set the value for authenticationType as SMSOTP, and provide values for countryCode and number with the signer's country code and phone number.

Upon execution, the document will be created with SMS athentication, and a document ID will be generated.

  • When the signer opens the document link, they will see a "Send OTP" button. Clicking this button will trigger the sending of an OTP to the signer via SMS.

    Step 1

  • After the signer enters the OTP and clicks the "Verify" button, the document will open, and the signer can start the signing process.

    Step 2