---
Source: https://docs.microblink.com/blinkid/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.

## 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>
</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>
</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>
</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>
</Tabs>

## Nationality, sex, and ethnicity

<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);
    console.log("Ethnicity:", result.ethnicity?.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}")
      println("Ethnicity: ${result.ethnicity?.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 ?? "")
      print("Ethnicity:", result.ethnicity?.value ?? "")
  }
  ```

  </TabItem>
</Tabs>

## Related articles

- [How to parse document class info](parse-document-class-info.md)
- [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 28, 2026
