Detect whether a document is supported
There are two distinct questions you might ask:
- Is this document type supported by BlinkID at all?
- Did the SDK classify the document it just processed, and as what?
Is the document type supported by BlinkID
BlinkID supports a large, continuously growing catalog of identity documents. The authoritative answer to "can BlinkID read this document" is the published list of supported documents. See Supported documents for the full catalog.
At runtime, you find out that a document is not supported through the per-frame processing status.
After processing an image, read inputImageAnalysisResult.processingStatus.
A value of unsupported-document means the recognizer does not support the document in the frame.
The same status also appears when a document is supported by BlinkID but excluded by a document class filter you configured. From the SDK's perspective these are indistinguishable: in both cases the document is "unsupported" relative to what the current session will accept. See How to restrict documents for that case.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
- Flutter (Dart)
- React Native (TS)
const processResult = await session.process(imageData);
const status = processResult.inputImageAnalysisResult.processingStatus;
if (status === "unsupported-document") {
console.log("This document is not supported.");
}
val processResult = session.process(inputImage).getOrThrow()
val status = processResult.inputImageAnalysisResult.processingStatus
if (status == ProcessingStatus.UnsupportedDocument) {
println("This document is not supported.")
}
let frameResult = try await session.process(inputImage: inputImage)
let status = frameResult.processResult?.inputImageAnalysisResult.processingStatus
if status == .unsupportedDocument {
print("This document is not supported.")
}
The Flutter wrapper doesn't expose the per-frame processing status.
Instead, control whether the SDK processes documents it classifies as unsupported with documentCaptureModule.unsupportedDocumentsAllowed, then inspect documentClassInfo on the result (see below) to find out what was recognized.
final scanningSettings = BlinkIdScanningSettings(
documentCaptureModule: DocumentCaptureModuleSettings(
unsupportedDocumentsAllowed: false, // reject unsupported documents (default)
),
);
The React Native wrapper doesn't expose the per-frame processing status.
Instead, control whether the SDK processes documents it classifies as unsupported with documentCaptureModule.unsupportedDocumentsAllowed, then inspect documentClassInfo on the result (see below) to find out what was recognized.
const scanningSettings = {
documentCaptureModule: {
unsupportedDocumentsAllowed: false, // reject unsupported documents (default)
},
};
Inspect what the SDK classified
When BlinkID does support and recognize a document, the final result carries a documentClassInfo describing what was classified.
Retrieve the result after processing, then inspect documentClassInfo.
The most useful fields are:
country: a country enumregion: a region enumtype: a document type enumcountryName: the human-readable country nameisoNumericCountryCode,isoAlpha2CountryCode,isoAlpha3CountryCode: ISO country codes
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
- Flutter (Dart)
- React Native (TS)
const result = await session.getResult();
const classInfo = result.documentClassInfo;
if (classInfo?.country !== undefined && classInfo?.type !== undefined) {
console.log("Recognized document.");
console.log("Country:", classInfo.countryName);
console.log("Country code:", classInfo.isoAlpha3CountryCode);
console.log("Country enum:", classInfo.country);
console.log("Region enum:", classInfo.region);
console.log("Type enum:", classInfo.type);
} else {
console.log("Document was not classified.");
}
val result = session.getResult().getOrNull()
val classInfo = result?.documentClassInfo
if (classInfo?.country != null && classInfo.type != null) {
println("Recognized document.")
println("Country: ${classInfo.countryName}")
println("Country code: ${classInfo.isoAlpha3CountryCode}")
println("Country enum: ${classInfo.country}")
println("Region enum: ${classInfo.region}")
println("Type enum: ${classInfo.type}")
} else {
println("Document was not classified.")
}
let result = session.getResult()
let classInfo = result?.documentClassInfo
if classInfo?.country != nil && classInfo?.type != nil {
print("Recognized document.")
print("Country:", classInfo?.countryName ?? "")
print("Country code:", classInfo?.isoAlpha3CountryCode ?? "")
print("Country enum:", String(describing: classInfo?.country))
print("Region enum:", String(describing: classInfo?.region))
print("Type enum:", String(describing: classInfo?.type))
} else {
print("Document was not classified.")
}
final classInfo = result?.documentClassInfo;
if (classInfo?.country != null && classInfo?.documentType != null) {
print("Recognized document.");
print("Country: ${classInfo?.countryName}");
print("Country enum: ${classInfo?.country?.name}");
print("Region enum: ${classInfo?.region?.name}");
print("Type enum: ${classInfo?.documentType?.name}");
} else {
print("Document was not classified.");
}
const classInfo = result.documentClassInfo;
if (classInfo?.country !== undefined && classInfo?.documentType !== undefined) {
console.log("Recognized document.");
console.log("Country:", classInfo.countryName);
console.log("Country enum:", classInfo.country);
console.log("Region enum:", classInfo.region);
console.log("Type enum:", classInfo.documentType);
} else {
console.log("Document was not classified.");
}
Restricting to your own accepted set
Detecting whether BlinkID supports a document is different from deciding which documents your integration accepts.
If you want to accept only a narrower set, for example only passports from a specific country, configure a document class filter.
Documents your filter rejects also surface at runtime as unsupported-document.
See How to restrict documents.