NFC identity verification API • Privacy-first • API-ready

Integrate ID verification into your own software.

Create secure NFC identity verification requests from your own system. Invite users by email or SMS, or send the generated link yourself. The user scans the NFC chip in the mobile app and you retrieve only the fields your process needs.

NFC chip verificationRead DG1/DG2 data and verify the document chip.
Data minimizationRequest only the fields and checks needed for your workflow.
Own workflowUse external references to connect results to your own dossiers.
Example flow
1POST /scan-requests
2Invite email / SMS / own channel
3App NFC + optional selfie check
4GET /scan-requests/{id}/details

API flow

ID Scan is designed for software vendors and organizations that want to add identity verification without building the full mobile scanning flow themselves.

1

Create a request

Create a scan request from your backend. Add an external reference, language, expiry, delivery settings, requested fields and checks.

2

Invite the user

Let ID Scan send the email or SMS, or use your own communication channel with the returned verification link.

3

Scan in the app

The user opens the mobile app, scans the MRZ, reads the NFC chip and optionally completes a live selfie check against the DG2 portrait photo.

4

Retrieve the result

Retrieve status, checks, requested fields and audit information through the API. Only configured fields are returned.

Base URL and authentication

API calls are sent to the ID Scan API base URL and authenticated using an API key generated in the ID Scan portal. The API key is sent through a dedicated request header and should only be used server-side. Never expose API keys in frontend code or mobile applications.

Base URL https://api.id-scan.app Example request GET https://api.id-scan.app/api/scan-requests/{id}/details X-API-KEY: YOUR_API_KEY Accept: application/json

Create request response

When a scan request is created, the API returns the request ID, request key, expiry time and verification links. Use the returned WebUrl in your own email, SMS, portal or workflow when using self delivery. On mobile devices, DeepLinkUrl can open the app directly.

{ "ScanRequestId": "2153ae29-0b77-4601-87b6-17ce9037ef3d", "Status": "requested", "LanguageCode": "nl", "ExternalReference": "customer-12345", "RequestKey": "ab6f1c05de29", "ExpiresAtUtc": "2026-05-28T06:58:17.9384521Z", "DeepLinkUrl": "idcheck://scan/ab6f1c05de29", "WebUrl": "https://id-scan.app/ab6f1c05de29", "IsTest": false }

Delivery options

You can choose how the user receives the verification request. This allows ID Scan to fit into both fully automated and custom communication flows.

Platform email

ID Scan sends a branded invitation email with a secure verification link.

Platform SMS

ID Scan sends the verification link by SMS. Useful for mobile-first onboarding flows.

Self delivery

Your system receives the link and sends it through your own email, SMS, portal or messaging workflow.

Request statuses

A verification request moves through a small set of statuses. Integrations can use these statuses to show progress, trigger reminders or decide whether a new request is needed.

StatusDescription
requestedThe request has been created and is waiting for the user to start or complete the verification.
compliance_pendingThe identity verification has been completed and optional compliance screening is being processed.
completedThe user completed the flow. Use IsSuccess and the check fields to determine whether verification passed.
expiredThe request expired before the user completed the verification.
deletedThe request was deleted and is no longer available for completion.
failedThe request could not be completed successfully because of an error or failed verification step.

External reference

Use an external reference to link a verification request to your own customer, employee, dossier, order or onboarding record. The same reference is returned when you retrieve request details.

Customer ID

Link the request to your own customer or client record.

Case or dossier number

Connect the result to a Wwft, HR or compliance dossier.

Order or workflow ID

Use the reference to continue automated workflows after verification is complete.

Requested fields

ID Scan supports data minimization. Configure exactly which fields should be returned to your system. The user can be shown what data will be shared before submission.

FieldDescriptionSource
surnameSurname / family name from the identity document.NFC DG1
given_namesGiven names from the identity document.NFC DG1
date_of_birthDate of birth. Can also be used for age checks.NFC DG1
date_of_expiryDocument expiry date.NFC DG1
document_numberDocument number. Can be returned full or masked depending on template settings.NFC DG1
document_typeDocument type, such as passport or identity card.NFC DG1
issuing_countryCountry that issued the document.NFC DG1
country_of_issueCountry of issue when available.NFC DG1
nationalityNationality from the identity document.NFC DG1
genderGender marker from the document, if requested.NFC DG1
photoPortrait photo from the NFC chip. Only return when explicitly needed.NFC DG2
mrz_masked_imageMasked MRZ image as proof of scan without exposing all MRZ data.Camera/MRZ
selfie_imageLive selfie image. Usually only included for manual review.Camera/selfie

Available checks

Checks can be requested as part of the verification flow. Some checks are technical NFC checks, while others are business rules such as minimum age or selfie verification.

CheckDescriptionReturned result
nfc_read_successIndicates whether the NFC chip was successfully read.true / false
chip_authentication_successIndicates whether chip authentication or chip verification succeeded.true / false
document_not_expiredChecks if the document expiry date is in the future.true / false
minimum_ageChecks whether the person meets a configured minimum age without necessarily returning the date of birth.{ required, passed }
sod_signature_validChecks the SOD signature when available.true / false
dg1_hash_validChecks whether DG1 data matches the signed document data.true / false
dg2_hash_validChecks whether the portrait photo data matches the signed document data.true / false
active_auth_okOptional active authentication result when supported by the document.true / false / not available
selfie_checkOptional live selfie verification matched against the DG2 portrait photo.{ requested, consent_given, passed, status, method }
compliance_screeningOptional PEP, sanctions and related person screening after the NFC identity verification has completed.{ requested, match_found, pep_match, sanctions_match, rca_match, highest_score, matches }

PEP and sanctions screening

ID Scan can optionally screen the verified identity data against PEP, sanctions and related person datasets. This helps support KYC, AML and compliance workflows after the NFC document verification has been completed.

PEP screening

Check whether the verified person appears as a politically exposed person.

Sanctions screening

Check whether the verified person appears on sanctions-related datasets.

Manual review

Possible findings should always be reviewed manually before taking action.

Result and return fields

The result endpoint returns request status, verification status, external reference, selected identity fields, selected images and check results. Fields that were not requested are not returned.

Request status

Requested, completed, expired, deleted or failed, including created and completed timestamps.

Selected fields

Only configured identity data such as name, nationality, date of birth or document expiry date.

Checks and audit

NFC read status, chip authentication, document validity, selfie check and optional PDF/reporting data.

Image fields

Image fields such as the DG2 portrait photo, masked MRZ image and selfie image are returned inline as Base64 encoded data when requested. Images are not returned as public URLs.

Base64 encoded

Use the data value as Base64 encoded binary image data.

Content type

Use content_type, such as image/jpeg, to reconstruct the image correctly.

Only when requested

Image data is only included when the field is explicitly requested in the template.

Document number masking

The document number can be returned full or masked. Masking helps reduce unnecessary exposure of document numbers while still allowing matching or audit checks in your own system.

ValueOptionDescription
(empty)No maskingReturn the document number as read from the identity document. Only use when the full document number is required.
last4_visibleLast 4 visibleMask the document number and only return the last four characters, for example *****7P44.
first4_visibleFirst 4 visibleMask the document number and only return the first four characters.

Example API request

The example below creates a verification request, asks ID Scan to send the invitation by email and returns only the selected fields and checks.

POST /api/scan-requests X-API-KEY: YOUR_API_KEY Content-Type: application/json { "externalReference": "customer-12345", "language": "en", "expiresInHours": 72, "delivery": { "mode": "platform", "channels": ["email"], "emailAddress": "client@example.com", "phoneNumber": null }, "template": { "fields": { "given_names": { "requested": true }, "surname": { "requested": true }, "document_number": { "requested": true, "masking": "last4_visible" }, "country_of_issue": { "requested": true }, "photo": { "requested": true }, "date_of_expiry": { "requested": true }, "nationality": { "requested": true }, "mrz_masked_image": { "requested": true } }, "checks": { "document_not_expired": true, "nfc_read_success": true, "chip_authentication_success": true, "selfie_check": true, "minimum_age": 18, "compliance_screening": true } } }

Example result

After completion, your system can retrieve the result by request ID or request key. The external reference can be used to connect the result to your own system.

GET /api/scan-requests/{id}/details X-API-KEY: YOUR_API_KEY { "VerificationRequestId": "912eef5b-7ec7-4825-9125-b5a0e68eb878", "Name": "Jane Doe", "EmailAddress": "jane@example.com", "PhoneNumber": "31612345678", "PreferredLanguage": "en", "Status": "completed", "RequestType": "identity_check", "DeliveryMode": "platform", "DeliveryChannels": "sms,email", "ResultJson": { "fields": { "country_of_issue": "NLD", "nationality": "NLD", "given_names": "JANE MARIA", "surname": "DOE", "date_of_birth": "1985-04-12", "date_of_expiry": "2034-01-03", "document_number": "*****7P44", "photo": { "available": true, "content_type": "image/jpeg", "data": "/9j/..." }, "mrz_masked_image": { "available": true, "content_type": "image/jpeg", "data": "/9j/4AAQSQ==..." } }, "checks": { "nfc_read_success": true, "chip_authentication_success": true, "document_not_expired": true, "minimum_age": { "required": 18, "passed": true }, "selfie_check": { "requested": true, "consent_given": true, "passed": true, "status": "passed", "method": "on_device_face_match" } }, "compliance": { "requested": true, "provider": "OpenSanctions", "match_found": false, "pep_match": false, "sanctions_match": false, "rca_match": false, "highest_score": 0.00, "matches": [] } }, "CreatedDateTimeUtc": "2026-05-26T06:14:26", "InvitationSentDateTimeUtc": "2026-05-26T06:14:26", "CompletedDateTimeUtc": "2026-05-26T06:16:04", "HasResult": true, "IsSuccess": true, "NfcReadSuccess": true, "ChipAuthenticationSuccess": true, "Summary": "Passport chip successfully read", "DocumentType": "PASSPORT" }

Retention and privacy

Retention settings can be configured per tenant. Verification data can be deleted after a fixed period, after read, or according to your configured privacy policy. This helps limit unnecessary storage of sensitive identity data.

Fixed days

Delete verification data after a configured number of days.

After read

Mark data as read when retrieved and schedule deletion after that moment.

Portal and API settings

Use separate retention settings for portal and API workflows when needed.

Additional endpoints

Besides creating and retrieving requests, integrations can resend invitations or delete a request. Deleting a request can be used when a workflow is cancelled or a verification is no longer needed.

Resend invitation

POST /scan-requests/{id}/resend

Delete request

DELETE /scan-requests/{id}

Read details

GET /scan-requests/{id}/details

Test mode

Test mode can be used to validate the full integration flow before going live. Test requests are marked with IsTest in the API response, so your system can separate test data from production workflows.

Safe testing

Validate request creation, delivery, app scanning and result retrieval without using production workflows.

Visible in response

The create request response contains IsTest, making test requests easy to detect.

Go live later

Start with a test API key or test tenant setup and switch to live verification after validation.

Open-source .NET example

Explore our public .NET integration example on GitHub. The example demonstrates how to create verification requests, retrieve verification results and integrate NFC passport verification into your own applications.

Complete example

Includes request creation, result retrieval and identity verification workflows using C# and .NET.

NFC verification

Learn how to process NFC passport verification results, document fields and verification checks.

Open source

Clone the repository, test the API and use it as a starting point for your own integration.

Failure and incomplete results

Not every request results in a successful verification. A user may stop the flow, the request may expire, or NFC reading may fail. Use Status, HasResult, IsSuccess and the check fields to determine the final outcome.

{ "VerificationRequestId": "912eef5b-7ec7-4825-9125-b5a0e68eb878", "Status": "completed", "HasResult": true, "IsSuccess": false, "NfcReadSuccess": false, "ChipAuthenticationSuccess": false, "Summary": "NFC chip could not be read", "DocumentType": null, "ResultJson": { "checks": { "nfc_read_success": false, "chip_authentication_success": false, "document_not_expired": null, "selfie_check": { "requested": true, "consent_given": false, "passed": false, "status": "not_completed", "method": "on_device_face_match" } } } }

Ready to integrate NFC identity verification?

Create a free account, generate an API key and test the full flow before going live.