Skip to main content

Overview

The NFC verification report captures what Didit read and validated from a document’s NFC chip — an ePassport, an electronic ID card, or another ICAO 9303 e-document. It includes the chip’s biographical data, cryptographic integrity checks (SOD and Data Group hashes), and a summary of the Document Signer Certificate (DSC) used by the issuing country. The report is produced after the user completes the NFC step in a workflow. Didit reads the chip’s Data Groups on the user’s device, verifies the Document Security Object (SOD) signature against the issuing country’s CSCA certificate, checks each Data Group hash against the values the SOD signed, and cross-checks the chip’s MRZ against the MRZ that was OCR’d off the visible side of the document. Each report carries its own status — independent of the overall session status — that reflects how the NFC step alone resolved:
  • Approved — the chip was read and none of the warnings that fired are configured to route the step to review or decline.
  • In Review — at least one warning fired whose configured action is Review (for example NFC_CHIP_NOT_VERIFIED when the unverified-chip action is set to Review).
  • Declined — at least one warning fired whose configured action is Decline (for example NFC_AND_OCR_DATA_NOT_SAME when the data-inconsistency action is set to Decline).
  • Not Finished — the user never completed the NFC step; the chip read was abandoned or the device did not support NFC.
  • Resub Requested — a reviewer asked the user to resubmit; the report will be superseded by a new attempt.

Where it appears in API responses

The NFC report ships inside the nfc_verifications[] array — always a JSON array, never a singular nfc object. Multiple entries appear when a workflow runs NFC more than once (for example a step-up flow); each entry carries its own node_id.
  • Session decision API — appears as nfc_verifications[] at the top level of GET /v3/session/{sessionId}/decision/. See Retrieve session decision.
  • Webhooksstatus.updated payloads include the same nfc_verifications[] array once the NFC step has produced data. See Webhooks.
  • Standalone NFC — for direct chip submission, see the NFC overview.
Older documentation referenced a singular nfc field. That shape does not exist on the v3 decision endpoint — it only appears on destinations explicitly pinned to V2 webhooks. Always read response.nfc_verifications[0] and iterate the array.

Schema

The canonical field-by-field schema lives on the Data models reference page. The fields below mirror that canonical schema.

Status values

The two certificate warnings (DSC_CERTIFICATE_REVOKED, DSC_CERTIFICATE_EXPIRED) are informational: they appear in warnings[] but never change the NFC status by themselves. See NFC warnings for the full behavior matrix.

Examples

Approved — chip read and cryptographically valid

Declined — OCR / chip mismatch

Security note

NFC chip data is signed by the issuing authority, so an Approved report with sod_integrity: true and dg_integrity: true is the strongest possible identity evidence Didit can produce. Treat the signed image URLs (portrait_image, signature_image) as short-lived: download them promptly and do not cache them publicly — re-request the decision when you need fresh links.