BlinkID mobile SDK

BlinkID enables scanning of over 100 international identity documents including driving licenses, national identity cards, passports and others. Information is extracted by scanning the MRZ (machine-readable zone), barcodes or plain text from the documents. The SDK is available for integration in native and cross-platform environments.

Go to BlinkID product page

Code, documentation, and integration guide are available in our Github repositories below. To get your free demo license key (no credit card required), register on our developer dashboard.

Download free BlinkID demo app

With BlinkID you can scan ID cards, passports, driver's licenses, visas and other identity documents in just a few seconds.

BlinkID Web API

With Docker implementation for an on-premise or cloud integration.

Learn more

Integration sample codes

Copy to clipboard
 * Set your license file. The recommended way is extending the Android Application class
 * and setting the license file in its onCreate callback.
 * Register on our dashboard to get the license key for your app.
public class MyApplication extends Application {
    public void onCreate() {
        MicroblinkSDK.setLicenseFile("path/to/license/file/within/assets/dir", this);

public class MyActivity extends Activity {
    // list of all available recognizers can be found here:
    private MrtdRecognizer mMrtdRecognizer;
    private UsdlRecognizer mUsdlRecognizer;
    private MyKadFrontRecognizer mMyKadFrontRecognizer;

    private RecognizerBundle mRecognizerBundle;
    protected void onCreate(Bundle bundle) {
        // setup views, as you would normally do in onCreate callback
        // create MrtdRecognizer for scanning Machine Readable Travel Document
        // see for options
        mMrtdRecognizer = new MrtdRecognizer();

        // create UsdlRecognizer for scanning US/Canada driver's license
        // see for options
        mUsdlRecognizer = new UsdlRecognizer();

        // create MyKadFrontRecognizer for scanning front side of Malaysian MyKad document
        // see for options
        mMyKadFrontRecognizer = new MyKadFrontRecognizer();

        // bundle recognizers into RecognizerBundle
        mRecognizerBundle = new RecognizerBundle(mMrtdRecognizer, mUsdlRecognizer, mMyKadFrontRecognizer);
    public void startScanning() {
        // Settings for DocumentScanActivity activity
        DocumentUISettings settings = new DocumentUISettings(mRecognizerBundle);
        // tweak settings as you wish
        // Start activity
        ActivityRunner.startActivityForResult(this, MY_REQUEST_CODE, settings);
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == MY_REQUEST_CODE) {
            if (resultCode == DocumentScanActivity.RESULT_OK && data != null) {
                // load the data into all recognizers bundled within your RecognizerBundle

                // now every recognizer object that was bundled within RecognizerBundle
                // has been updated with results obtained during the scanning session

                // you can get the result by invoking getResult on recognizer
                MrtdRecognizer.Result mrtdResult = mMrtdRecognizer.getResult();
                if (mrtdResult.getResultState() == Recognizer.Result.State.Valid) {
                    // result is valid, you can use it however you wish

                UsdlRecognizer.Result usdlResult = mUsdlRecognizer.getResult();
                if (usdlResult.getResultState() == Recognizer.Result.State.Valid) {
                    // result is valid, you can use it however you wish

                MyKadFrontRecognizer.Result myKadFrontResult = mMyKadFrontRecognizer.getResult();
                if (myKadFrontResult.getResultState() == Recognizer.Result.State.Valid) {
                    // result is valid, you can use it however you wish