The SDK handles all communication with the Validation Gateway for you. You make two calls in your code — registerDevice() and validate() — and the SDK takes care of the secure session in between. All traffic goes through your proxy to ICP.
1. Register the device
The first time the SDK runs on a device, register it. This ties the device to your organization.
mbkyc.registerDevice("lobby-kiosk")
You can check status at any time with checkRegistration() — active, inactive, or not_found. A device must be active before it can validate.
2. Secure session
Before each verification the SDK opens a short-lived encrypted session with the Validation Gateway (an authenticated key exchange). You don’t call this yourself — the SDK does it automatically and re-opens it transparently when it expires, so long-running kiosks keep working.
Sessions are short-lived by design. The channel is encrypted and authenticated end to end; identity data is never sent in the clear.
3. Validate
Submit an Emirates ID or passport, optionally with a fingerprint. The SDK encrypts the request, sends it through your proxy, and returns the result.
val result = mbkyc.validate(
EmiratesIdManual(
idNumber = "784-XXXX-XXXXXXX-X",
documentNumber = "...",
nationality = "ARE",
)
)
The result is the same shape in every SDK:
{
"success": true,
"data": { "status": "pass", "verified": true },
"message": "Verification completed"
}
See Validation methods for the request types and Biometrics for adding a fingerprint.
You never construct session or encryption logic by hand — the SDK owns it. Authenticate your requests through the token signer; everything else on the channel is handled for you.