Identity verification is a crucial layer of security in digital document workflows. It’s seamlessly integrated into BoldSign as a signer authentication option. Requiring signers to authenticate their identity before accessing documents mitigates the risks of unauthorized use and safeguards sensitive information. Identity verification via the BoldSign API provides peace of mind for businesses and individual signers alike.
Read more about identity verification.
Identity verification settings
BoldSign provides several identity-verification controls that can be configured per signer to ensure secure access. Below is a concise explanation of each option available for Identity verification. Read more about identity verification settings and how they work.
- Identity verification frequency: Controls how often the signer must complete identity verification (e.g., every access or only once).
- Verification attempt limit: Specifies the maximum number of retries permitted before access is restricted.
- Name-match tolerance: Defines how strictly the signer’s name must match the name on the identity document (Strict, Moderate, or Lenient).
- Require selfie check: Requires a selfie comparison against the ID document to prevent impersonation.
- Require live document capture: Enforces live document capture using the device camera to ensure authenticity.
- Allowed ID document types: You can specify which types of government-issued documents are accepted during identity verification. BoldSign supports Passport, DriverLicense, and IDCard.
- Allowed countries: If you need to limit identity verification to specific countries, configure Allowed Countries in your BoldSign Web Application.
Note: Allowed Countries can be configured at the account level in the BoldSign Web Application. To learn how to configure this option in your Business Profile, refer to Allowed Countries for Identity Verification.
For the full list of Identity verification settings, supported values, and explanations, see: Identity verification settings in BoldSign.
With the BoldSign SDKs, you can enable identity verification, specify which ID documents are accepted, and manage Allowed Countries within your BoldSign settings. For a complete guide to sending a document with identity verification, refer Send Document with ID verification.
Example Code for Sending Document with Identity Verification
The following code samples demonstrate how to send documents requiring every access identity verification via the BoldSign API in various programming languages.
Testing identity verification in sandbox environments
When testing identity verification in non-production environments, use the signer name “Jenny Rosen”. This ensures consistent results for the name-matching step in the BoldSign sandbox environment. Refer to the official BoldSign documentation: Sandbox mode.
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 'Files=@{Your file name};type=application/pdf' \
-F 'Title={DOCUMENT_TITLE}' \
-F 'Signers={
"name": "Jenny Rosen",
"emailAddress": "[email protected]",
"authenticationType": "IdVerification",
"deliveryMode": "Email",
"identityVerificationSettings": {
"type": "EveryAccess",
"maximumRetryCount": 10,
"requireLiveCapture": true,
"requireMatchingSelfie": true,
"nameMatcher": "Strict",
"allowedDocumentTypes": ["Passport", "IDCard", "DriverLicense"]
},
"signerType": "Signer",
"locale": "EN",
"formFields": [
{
"id": "signature1",
"fieldType": "Signature",
"pageNumber": 1,
"bounds": {
"x": 160,
"y": 150,
"width": 51, "height": 21
},
"isRequired": true
}
]
}'
var apiClient = new ApiClient("https://api.boldsign.com", "YOUR_API_KEY");
var documentClient = new DocumentClient(apiClient);
var file = new DocumentFilePath
{
ContentType = "application/pdf",
FilePath = "FILE_PATH",
};
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 formFields = new List<FormField> { signatureField };
var idVerification = new IdentityVerificationSettings
{
Type = IdVerificationType.EveryAccess,
MaximumRetryCount = 10,
RequireLiveCapture = true,
RequireMatchingSelfie = true,
NameMatcher = NameVariation.Strict,
AllowedDocumentTypes = new List<AllowedDocumentType>
{
AllowedDocumentType.Passport,
AllowedDocumentType.IDCard,
AllowedDocumentType.DriverLicense
}
};
var signer = new DocumentSigner(
signerName: "Jenny Rosen",
signerType: SignerType.Signer,
signerEmail: "[email protected]",
authenticationType: AuthenticationType.IdVerification,
identityVerificationSettings: idVerification,
formFields: formFields,
locale: Locales.EN);
var sendForSign = new SendForSign
{
Title = "DOCUMENT_TITLE",
Signers = new List<DocumentSigner> { signer },
Files = new List<IDocumentFile> { file },
};
var documentCreated = documentClient.SendDocument(sendForSign);
import boldsign
configuration = boldsign.Configuration(api_key="YOUR_API_KEY")
with boldsign.ApiClient(configuration) as api_client:
document_api = boldsign.DocumentApi(api_client)
signature_field = boldsign.FormField(
id="Signature1",
field_type="Signature",
page_number=1,
bounds=boldsign.Rectangle(x=100, y=100, width=100, height=50),
is_required=True
)
idVerification = boldsign.IdentityVerificationSettings(
type="EveryAccess",
maximum_retry_count=10,
require_live_capture=True,
require_matching_selfie=True,
name_matcher="Strict",
allowed_document_types=["Passport","IDCard","DriverLicense"]
)
signer = boldsign.DocumentSigner(
name="Jenny Rosen",
email_address="[email protected]",
signer_type="Signer",
authentication_type="IdVerification",
identity_verification_settings=idVerification,
form_fields=[signature_field],
locale="EN"
)
send_for_sign = boldsign.SendForSign(
title="DOCUMENT_TITLE",
signers=[signer],
files=["FILE_PATH"]
)
document_created = document_api.send_document(send_for_sign=send_for_sign)
<?php
require 'vendor/autoload.php';
use BoldSign\Configuration;
use BoldSign\Api\DocumentApi;
use BoldSign\Model\DocumentSigner;
use BoldSign\Model\FormField;
use BoldSign\Model\Rectangle;
use BoldSign\Model\SendForSign;
use BoldSign\Model\IdentityVerificationSettings;
$config = new Configuration();
$config->setApiKey('YOUR_API_KEY');
$documentApi = new DocumentApi($config);
$bounds = new Rectangle();
$bounds->setX(100);
$bounds->setY(100);
$bounds->setWidth(100);
$bounds->setHeight(50);
$field = new FormField();
$field->setId("Signature1");
$field->setFieldType(FormField::FIELD_TYPE_SIGNATURE);
$field->setPageNumber(1);
$field->setBounds($bounds);
$field->setIsRequired(true);
$idVerification = new IdentityVerificationSettings();
$idVerification->setType(IdentityVerificationSettings::TYPE_EVERY_ACCESS);
$idVerification->setMaximumRetryCount(10);
$idVerification->setRequireLiveCapture(true);
$idVerification->setRequireMatchingSelfie(true);
$idVerification->setNameMatcher(IdentityVerificationSettings::NAME_MATCHER_STRICT);
$idVerification->setAllowedDocumentTypes(["Passport", "IDCard", "DriverLicense"]);
$signer = new DocumentSigner();
$signer->setName("Jenny Rosen");
$signer->setEmailAddress("[email protected]");
$signer->setSignerType(DocumentSigner::SIGNER_TYPE_SIGNER);
$signer->setAuthenticationType(DocumentSigner::AUTHENTICATION_TYPE_ID_VERIFICATION);
$signer->setIdentityVerificationSettings($idVerification);
$signer->setFormFields([$field]);
$signer->setLocale("EN");
$sendForSign = new SendForSign();
$sendForSign->setTitle("DOCUMENT_TITLE");
$sendForSign->setSigners([$signer]);
$sendForSign->setFiles(["FILE_PATH"]);
$documentCreated = $documentApi->sendDocument($sendForSign);
ApiClient client = Configuration.getDefaultApiClient();
client.setApiKey("YOUR_API_KEY");
DocumentApi documentApi = new DocumentApi(client);
Rectangle rect = new Rectangle();
rect.setX(100f);
rect.setY(100f);
rect.setWidth(100f);
rect.setHeight(50f);
FormField field = new FormField();
field.setId("Signature1");
field.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
field.setPageNumber(1);
field.setBounds(rect);
field.setIsRequired(true);
List<IdentityVerificationSettings.AllowedDocumentTypesEnum> allowedDocTypes = new ArrayList<>();
allowedDocTypes.add(IdentityVerificationSettings.AllowedDocumentTypesEnum.PASSPORT);
allowedDocTypes.add(IdentityVerificationSettings.AllowedDocumentTypesEnum.ID_CARD);
allowedDocTypes.add(IdentityVerificationSettings.AllowedDocumentTypesEnum.DRIVER_LICENSE);
IdentityVerificationSettings idVerification = new IdentityVerificationSettings();
idVerification.setType(IdentityVerificationSettings.TypeEnum.EVERY_ACCESS);
idVerification.setMaximumRetryCount(10);
idVerification.setRequireLiveCapture(true);
idVerification.setRequireMatchingSelfie(true);
idVerification.setNameMatcher(IdentityVerificationSettings.NameMatcherEnum.STRICT);
idVerification.setAllowedDocumentTypes(allowedDocTypes);
DocumentSigner signer = new DocumentSigner();
signer.setName("Jenny Rosen");
signer.setEmailAddress("[email protected]");
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setAuthenticationType(DocumentSigner.AuthenticationTypeEnum.ID_VERIFICATION);
signer.setIdentityVerificationSettings(idVerification);
signer.setFormFields(Arrays.asList(field));
signer.setLocale(DocumentSigner.LocaleEnum.EN);
List<File> files = new ArrayList<>();
files.add(new File("FILE_PATH"));
SendForSign sendForSign = new SendForSign();
sendForSign.setTitle("DOCUMENT_TITLE");
sendForSign.setSigners(Arrays.asList(signer));
sendForSign.setFiles(files);
DocumentCreated documentCreated = documentApi.sendDocument(sendForSign);
import { DocumentApi, DocumentSigner, FormField, Rectangle, SendForSign, IdentityVerificationSettings } from "boldsign";
import * as fs from 'fs';
async function main() {
const documentApi = new DocumentApi();
documentApi.setApiKey("YOUR_API_KEY");
const rect = new Rectangle();
rect.x = 100;
rect.y = 100;
rect.width = 100;
rect.height = 50;
const field = new FormField();
field.id = "Signature1";
field.fieldType = FormField.FieldTypeEnum.Signature;
field.pageNumber = 1;
field.bounds = rect;
field.isRequired = true;
const idVerification = new IdentityVerificationSettings();
idVerification.type = IdentityVerificationSettings.TypeEnum.EveryAccess;
idVerification.maximumRetryCount = 10;
idVerification.requireLiveCapture = true;
idVerification.requireMatchingSelfie = true;
idVerification.nameMatcher = IdentityVerificationSettings.NameMatcherEnum.Strict;
idVerification.allowedDocumentTypes = ["Passport","IDCard","DriverLicense"];
const signer = new DocumentSigner();
signer.name = "Jenny Rosen";
signer.emailAddress = "[email protected]";
signer.signerType = DocumentSigner.SignerTypeEnum.Signer;
signer.authenticationType = DocumentSigner.AuthenticationTypeEnum.IdVerification;
signer.identityVerificationSettings = idVerification;
signer.formFields = [field];
signer.locale = "EN";
const sendForSign = new SendForSign();
sendForSign.title = "DOCUMENT_TITLE";
sendForSign.signers = [signer];
sendForSign.files = [fs.createReadStream('FILE_PATH')];
const documentCreated = await documentApi.sendDocument(sendForSign);
}
main();
Conclusion
Utilize the code samples in this blog to quickly integrate secure document sending with identity verification directly into your application. identity verification directly into your application. Prefer using the BoldSign web app? You can manage identity verification settings, configure allowed countries, and review accepted ID document types in your BoldSign account settings. For complete guidance, refer to Send a document with Identity Verification and Allowed countries and ID document types.
If you’re not a BoldSign user yet, start your 30-day trial today to experience firsthand how BoldSign simplifies your document-sending workflows. We value your feedback, so please don’t hesitate to share your thoughts in the comments section below. If you have any questions or need further details about our services, please schedule a demo or reach out to our support team via our dedicated support portal.