---
Source: https://docs.microblink.com/blinkid/v8000/extract-fields
Title: Extract specific fields
Description: Access name, date of birth, document number, expiry, address, and other fields from BlinkID scanning results
---

# Extract specific fields

The top-level result object contains aggregated fields extracted from all scanned sides of the document.
All fields are optional—the SDK only populates what it can read from the document.
Always check whether a field is present before using its value.

On Web, string fields are typed as `StringResult`, a multi-alphabet object.
Access the value for a specific script using the alphabet key: `result.firstName?.latin?.value`.

## Name fields

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    console.log("First name:", result.firstName?.latin?.value);
    console.log("Last name:", result.lastName?.latin?.value);
    console.log("Full name:", result.fullName?.latin?.value);

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      println("First name: ${result.firstName?.value}")
      println("Last name: ${result.lastName?.value}")
      println("Full name: ${result.fullName?.value}")
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      print("First name:", result.firstName?.value ?? "")
      print("Last name:", result.lastName?.value ?? "")
      print("Full name:", result.fullName?.value ?? "")
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    print('First name: ${result.firstName?.value}');
    print('Last name: ${result.lastName?.value}');
    print('Full name: ${result.fullName?.value}');
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  console.log("First name:", result.firstName?.value);
  console.log("Last name:", result.lastName?.value);
  console.log("Full name:", result.fullName?.value);
  ```

  </TabItem>
</Tabs>

## Date of birth

Date fields carry both a structured representation (year, month, day) and the original string as it appeared on the document.

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    const dob = result.dateOfBirth;
    if (dob) {
      console.log("Year:", dob.year);
      console.log("Month:", dob.month);
      console.log("Day:", dob.day);
      console.log("Original string:", dob.originalString?.latin?.value);
    }

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      result.dateOfBirth?.let { dob ->
          println("Year: ${dob.year}")
          println("Month: ${dob.month}")
          println("Day: ${dob.day}")
          println("Original string: ${dob.originalString?.value}")
      }
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      if let dob = result.dateOfBirth {
          print("Year:", dob.year as Any)
          print("Month:", dob.month as Any)
          print("Day:", dob.day as Any)
          print("Original string:", dob.originalString?.value ?? "")
      }
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    final dob = result.dateOfBirth;
    if (dob != null) {
      print('Year: ${dob.date?.year}');
      print('Month: ${dob.date?.month}');
      print('Day: ${dob.date?.day}');
      print('Original string: ${dob.originalString?.value}');
    }
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  const dob = result.dateOfBirth;
  if (dob) {
    console.log("Year:", dob.date?.year);
    console.log("Month:", dob.date?.month);
    console.log("Day:", dob.date?.day);
    console.log("Original string:", dob.originalString?.value);
  }
  ```

  </TabItem>
</Tabs>

## Document number and expiry

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    console.log("Document number:", result.documentNumber?.latin?.value);

    const expiry = result.dateOfExpiry;
    if (expiry) {
      console.log("Expiry year:", expiry.year);
      console.log("Expiry month:", expiry.month);
      console.log("Expiry day:", expiry.day);
    }

    console.log("Permanent:", result.dateOfExpiryPermanent);

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      println("Document number: ${result.documentNumber?.value}")
      result.dateOfExpiry?.let { expiry ->
          println("Expiry year: ${expiry.year}")
          println("Expiry month: ${expiry.month}")
          println("Expiry day: ${expiry.day}")
      }
      println("Permanent: ${result.dateOfExpiryPermanent}")
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      print("Document number:", result.documentNumber?.value ?? "")
      if let expiry = result.dateOfExpiry {
          print("Expiry year:", expiry.year as Any)
          print("Expiry month:", expiry.month as Any)
          print("Expiry day:", expiry.day as Any)
      }
      print("Permanent:", result.dateOfExpiryPermanent as Any)
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    print('Document number: ${result.documentNumber?.value}');
    final expiry = result.dateOfExpiry;
    if (expiry != null) {
      print('Expiry year: ${expiry.date?.year}');
      print('Expiry month: ${expiry.date?.month}');
      print('Expiry day: ${expiry.date?.day}');
    }
    print('Permanent: ${result.dateOfExpiryPermanent}');
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  console.log("Document number:", result.documentNumber?.value);

  const expiry = result.dateOfExpiry;
  if (expiry) {
    console.log("Expiry year:", expiry.date?.year);
    console.log("Expiry month:", expiry.date?.month);
    console.log("Expiry day:", expiry.date?.day);
  }

  console.log("Permanent:", result.dateOfExpiryPermanent);
  ```

  </TabItem>
</Tabs>

## Address

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    console.log("Address:", result.address?.latin?.value);
    console.log("Additional address:", result.additionalAddressInformation?.latin?.value);

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      println("Address: ${result.address?.value}")
      println("Additional address: ${result.additionalAddressInformation?.value}")
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      print("Address:", result.address?.value ?? "")
      print("Additional address:", result.additionalAddressInformation?.value ?? "")
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    print('Address: ${result.address?.value}');
    print('Additional address: ${result.additionalAddressInformation?.value}');
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  console.log("Address:", result.address?.value);
  console.log("Additional address:", result.additionalAddressInformation?.value);
  ```

  </TabItem>
</Tabs>

## Nationality and sex

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    console.log("Nationality:", result.nationality?.latin?.value);
    console.log("Sex:", result.sex?.latin?.value);

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      println("Nationality: ${result.nationality?.value}")
      println("Sex: ${result.sex?.value}")
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      print("Nationality:", result.nationality?.value ?? "")
      print("Sex:", result.sex?.value ?? "")
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    print('Nationality: ${result.nationality?.value}');
    print('Sex: ${result.sex?.value}');
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  console.log("Nationality:", result.nationality?.value);
  console.log("Sex:", result.sex?.value);
  ```

  </TabItem>
</Tabs>

## Document class info

`documentClassInfo` identifies the type of document that was scanned—country, document type, and region.
It is always present on the result.

<Tabs queryString="platform">

  <TabItem value="web" label="Web (TS)" default>

  ```typescript
  blinkId.addOnResultCallback((result) => {
    const classInfo = result.documentClassInfo;
    console.log("Country:", classInfo.country);
    console.log("Document type:", classInfo.documentType);
    console.log("Region:", classInfo.region);

    void blinkId.destroy();
  });
  ```

  </TabItem>
  <TabItem value="android" label="Android (Kotlin)">

  ```kotlin
  onScanningSuccess = { result ->
      val classInfo = result.documentClassInfo
      println("Country: ${classInfo.country}")
      println("Document type: ${classInfo.documentType}")
      println("Region: ${classInfo.region}")
  }
  ```

  </TabItem>
  <TabItem value="ios" label="iOS (Swift)">

  ```swift
  onScanCompleted: { resultState in
      guard let result = resultState.scanningResult else { return }
      let classInfo = result.documentClassInfo
      print("Country:", classInfo.country)
      print("Document type:", classInfo.documentType)
      print("Region:", classInfo.region)
  }
  ```

  </TabItem>
  <TabItem value="flutter" label="Flutter (Dart)">

  ```dart
  if (result != null) {
    final classInfo = result.documentClassInfo;
    print('Country: ${classInfo?.country}');
    print('Document type: ${classInfo?.documentType}');
    print('Region: ${classInfo?.region}');
  }
  ```

  </TabItem>
  <TabItem value="react-native" label="React Native (TS)">

  ```typescript
  const classInfo = result.documentClassInfo;
  console.log("Country:", classInfo?.country);
  console.log("Document type:", classInfo?.documentType);
  console.log("Region:", classInfo?.region);
  ```

  </TabItem>
</Tabs>


## Related articles

- [How to scan a single-sided document](scan-single-side.md)
- [How to scan a double-sided document](scan-double-side.md)
- [How to scan a passport](scan-passport.md)
- [How to scan from a static image](scan-image.md)


Last updated on Jul 24, 2026
