ID Bolt is a pre-built ID scanning workflow that seamlessly integrates into any website allowing users to scan their identity documentation in just one second.. ID Bolt works on-device, via desktop and mobile in a unified solution, ensuring no identity information is collected by third-party servers and reduces latency for quick scanning performance.
Learn more about ID Bolt at https://www.scandit.com/products/id-bolt/.
Add the ID Bolt client as a dependency:
npm i @scandit/web-id-bolt
Copy the following snippet to get started.
Your application defines when the ID Bolt pop-up is opened. In this snippet, we open it after a click on a button present in the page:
import {
Passport,
IdCard,
DriverLicense,
VisaIcao,
DocumentSelection,
IdBoltSession,
Region,
ReturnDataMode,
Validators,
} from "@scandit/web-id-bolt";
const ID_BOLT_URL = "https://app.id-scanning.com";
const LICENSE_KEY = "-- YOUR LICENSE KEY HERE --";
async function startIdBolt() {
// define which documents are allowed to be scanned. More complex rules can be added.
const documentSelection = DocumentSelection.create({
accepted: [
new Passport(Region.Any),
new IdCard(Region.Any),
new DriverLicense(Region.Any),
new VisaIcao(Region.Any),
],
});
// initialization of the ID Bolt session
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection,
// define what data you expect in the onCompletion listener (set below)
returnDataMode: ReturnDataMode.Full,
// add validation rules on the scanned document
validation: [Validators.notExpired()],
locale: "en",
onCompletion: (result) => {
// the ID has been captured and validation was successful. In this example the result
// will contain the document data because `returnDataMode` was set to ReturnDataMode.Full.
alert(`Thank you ${result.capturedId?.fullName ?? ""}`);
},
onCancellation: (reason) => {
// the ID Bolt pop-up has been terminated without a succesful scan
},
});
// open the pop-up
await idBoltSession.start();
}
// open ID Bolt when some button is clicked
const someButton = document.getElementById("someButton");
someButton.addEventListener("click", startIdBolt);
For completeness this is the HTML you will need for the example:
<button id="someButton">Start ID Bolt</button>
If you have Content-Security-Policy
headers (CSP) which prevent loading iframes on your page, you need to adapt the value like so:
frame-src 'self' https://app.id-scanning.com https://id-service.scandit.com
The main class of ID Bolt. It represents a session in which the end-user is guided through a workflow to scan their ID. The IdBoltSession.onCompletion()
callback is called when the user has scanned their ID, the ID has been accepted and the ID Bolt pop-up is closed. Similarly, IdBoltSession.onCancellation()
is called when the user closes the ID Bolt pop-up without finishing the full process successfully.
Using validators, ID Bolt can verify the expiration date or other features of the ID. Optionally, this can be done without sharing any personally identifiable information (PII) with your website.
Primary way to create an ID Bolt session.
-
serviceUrl: string
: the URL that ID Bolt loads when started. Provided in your account on the Scandit dashboard. Note: app.id-scanning.com is an alias that points to Scandit’s servers. In a production environment it can be changed to your own domain name pointing to Scandit’s servers. This will require you to configure a CNAME record in the DNS settings of your domain. -
options: IdBoltCreateSessionOptions
: an object specifying the session options:-
licenseKey: string
: your license key, provided in you account on the Scandit dashboard. -
documentSelection: DocumentSelection
: an object specifying the acceptable documents. SeeDocumentSelection
further below. -
returnDataMode: ReturnDataMode
: defines the extent of the data returned by theonCompletion()
callback. UseReturnDataMode.FullWithImages
to get all extracted data and images, orReturnDataMode.Full
to get all extracted data without images. -
validation?: Validators[]
: an optional array of validators. SeeValidators
further below. Default:[]
-
locale?: string
: the language in which the text is displayed. Default:"en-US"
. -
textOverrides?: TextOverrides
: override the translation of some texts in the UI -
workflow?: WorkflowOptions
: Options to customize the workflow. SeeWorkflowOptions
further below. -
theme?: Theme
: Options to customize the theme. SeeTheme
further below. -
onCompletion: (result: CompletionResult) => void
: A callback that is called when the user has successfully scanned their ID. Depending on theReturnDataMode
value you passed inIdBoltSession
,result.capturedId
will contain the document data ornull
. -
onCancellation?: () => void
: A callback that is called when the user has closed the ID Bolt pop-up without having finished the scanning workflow.
-
Once created, a session object does nothing until you execute start()
on it:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection,
returnDataMode: ReturnDataMode.FullWithImages,
validation: [Validators.notExpired()],
onCompletion: (result) => alert(`Thanks ${result.capturedId?.fullName}`),
});
await idBoltSession.start();
Open the ID Bolt pop-up to start the scanning workflow. This method returns a session ID identifying the session.
A class to define which types of documents the ID Bolt will accept. The list of documents is provided as couples of Region
and DocumentType
, for example passports from the USA.
Not accepted documents may still get recognized by the scanner. In this case the user will be notified to use one of the accepted document types.
Primary way to create a DocumentSelection
instance with all the accepted and rejected documents.
Only Selection.accepted
is mandatory.
Example:
const documentSelection = DocumentSelection.create({
accepted: [new Passport(Region.FRA)],
rejected: [new DriversLivense(Region.CHE)],
});
Each type of document is represented as its own class.
Represents passports of a specific region
Example:
new Passport(Region.USA);
Represents id cards of a specific region
Example:
new IdCard(Region.USA);
Represents drivers licenses of a specific region
Example:
new DriversLicense(Region.USA);
Represents visas of a specific region that comply with the International Civil Aviation Organization (ICAO) standards
Example:
new VisaIcao(Region.USA);
Validators allow to run checks on the scanned ID. Validators are only run on accepted documents.
Checks that the document has not expired.
Note that this test will not pass if the expiration date could not be determined from the extracted data.
Checks that the document has still not expired after the duration passed in argument.
Duration
is an object with following properties:
days?: number
months?: number
One of Duration.days
and Duration.months
has to be provided.
In the following example, the ID must not expire in the next 12 months:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection: ...,
returnDataMode: ReturnDataMode.FullWithImages,
validation: [Validators.notExpiredIn({months: 12})],
});
Note that this test will not pass if the expiration date could not be determined from the extracted data.
Checks that the scanned driver license is compliant with the rules of Real ID defined by the American Association of Motor Vehicle Administrators (AAMVA).
Note that this test will not pass if the scanned document is not an AAMVA document.
The locale is specified as a string. At least the following languages are supported, for a complete list see Scandit docs.
en-US
de-DE
de-CH
es-ES
fr-FR
it-IT
nl-NL
pl-PL
pt-PT
da-DK
Some texts can be replaced with your own. If you use TypeScript, you will get autocompletion for the possible keys.
key | Purpose and location |
---|---|
titles.LOCAL_SCAN_HEADER |
The title above the scanner (local scan) |
titles.SCANNER_HEADER |
The title above the scanner in the handover scenario (remote scan). |
texts.HELP_SUPPORTED_DOCUMENTS_INCLUDE_LIST_BRIEF |
A brief text appearing on the welcome screen describing the main documents that are supported. |
texts.HELP_SUPPORTED_DOCUMENTS_INCLUDE_LIST |
A text describing the full list of supported documents. Appears on the help screen. |
texts.HELP_SUPPORTED_DOCUMENTS_EXCLUDE_LIST |
A text describing the full list of excluded documents. Appears on the help screen. |
Any translation key not in the allowed list will trigger a warning in the console and will be discarded.
Example usage:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
locale: "en-US",
textOverrides: {
"titles.LOCAL_SCAN_HEADER": "Scan passport of John Sample",
"titles.SCANNER_HEADER": "Scan passport of John Sample",
},
});
The WorkflowOptions
object allows you to customize the user interface of the ID Bolt workflow. It has the following properties:
-
showWelcomeScreen: boolean
: Determines whether to display the welcome screen at the beginning of the workflow.- When enabled: Always shown on both desktop and mobile.
- When disabled: Only shown on desktop to allow users to select between scanning on local device or handing over. On mobile, it skips directly to the scanner.
-
showResultScreen: boolean
: Determines whether to show the result screen at the end of the workflow.
Example usage:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection: ...,
returnDataMode: ReturnDataMode.FullWithImages,
workflow: {
showWelcomeScreen: false,
showResultScreen: true,
}
});
Some countries have specific requirements for the anonymization of documents. ID-Bolt can be configured to not extract those sensitive fields from documents. Black boxes cover sensitive data in result images.
The AnonymizationMode
enum has the following values:
Value | Description |
---|---|
None |
No anonymization is applied |
FieldsOnly |
Only fields (data) are anonymized |
ImagesOnly |
Only images are anonymized |
FieldsAndImages |
Both fields and images are anonymized |
Example usage:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection: ...,
returnDataMode: ReturnDataMode.Full,
anonymizationMode: AnonymizationMode.FieldsOnly,
});
Note that when anonymization for images is enabled, full frame images are not available in the result, as those images are captured before processing.
The Theme
object allows you to customize the visual appearance of the ID Bolt interface. It has the following optional properties:
An object containing color definitions for various UI elements:
-
primary
: The primary color used throughout the interface -
image
: Color used for image-related elements -
background
: Main popup background color -
backgroundSecondary
: Secondary background color, used for surfaces -
backgroundInverse
: Inverse background color -
textPrimary
: Primary text color -
textSecondary
: Secondary text color -
textTertiary
: Tertiary text color -
textInverse
: Inverse text color -
success
: Color for success states -
error
: Color for error states -
warning
: Color for warning states -
info
: Color for informational states -
buttonBackground
: Background color for buttons, defaults toprimary
-
buttonText
: Text color for buttons, defaults totextInverse
-
buttonBorder
: Border color for buttons, defaults toprimary
-
buttonBackgroundDisabled
: Background color for disabled buttons -
buttonBorderDisabled
: Border color for disabled buttons -
buttonTextDisabled
: Text color for disabled buttons
An object containing dimension values for UI elements:
-
radiusPopup
: Border radius for the popup -
radiusButton
: Border radius for buttons -
radiusCard
: Border radius for cards
All properties are optional and should be specified as string values (e.g., color codes for colors, pixel or rem values for dimensions). Only the values specified will be used, all other values will be set to their default values.
Example usage:
const idBoltSession = IdBoltSession.create(ID_BOLT_URL, {
licenseKey: LICENSE_KEY,
documentSelection: ...,
returnDataMode: ReturnDataMode.FullWithImages,
theme: {
colors: {
primary: "#820900",
},
dimensions: {
radiusButton: "22px",
},
},
});
The interface defining the object you receive in CompletionResult.capturedId
.
CapturedId
:
firstName: string | null
lastName: string | null
fullName: string
sex: string | null
nationality: string | null
address: string | null
-
issuingCountry: string | null
: The ISO (Alpha-3 code) abbreviation of the issuing country of the document. -
documentNumber: string | null
: A unique identifier assigned to an individual document, such as an identification card or passport. This number is specific to the document itself and may change if a new document is issued. documentAdditionalNumber: string | null
-
personalIdNumber: string | null
: A unique identification number assigned to an individual, often for life, used for identification and administrative purposes (e.g., taxation, social security, or government records). dateOfBirth: DateResult | null
age: number | null
dateOfExpiry: DateResult | null
isExpired: boolean | null
dateOfIssue: DateResult | null
documentType: DocumentType | null
capturedResultTypes: string[]
-
images: [Object] | null
: object containing base64 encoded jpg images:-
cropped: string[]
: contains cropped images of the ID, in the order they were captured, only available when the visual inspection zone is scanned -
fullFrame: string[]
: contains full frame images in the order they were captured.
-
-
mrzResult: {capturedMrz: string | null} | null
: Captured MRZ raw data
An object representing a date.
DateResult
:
day: number
month: number
year: number
An enumeration of regions (mostly countries).
Example:
// France
Region.France;
// Any (world wide)
Region.Any;
An enumeration of the available main document types.
DocumentType
:
Passport
IdCard
DriverLicense
Values used by IdBoltCreateSessionOptions
to define what data is returned by IdBoltCreateSessionOptions.onCompletion()
.
ReturnDataMode
:
-
Full
: all extracted data is returned, but images are excluded. -
FullWithImages
: all extracted data is returned, including images of the scanned ID.